|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CBR.Core.Helpers;
using System.Collections.ObjectModel;
namespace CBR.ViewModels
{
public class TreeViewItemViewModel : ViewModelBase
{
static private TreeViewItemViewModel _dummyChild = new TreeViewItemViewModel();
private TreeViewItemViewModel _parentItem;
#region ----------------CONSTRUCTOR----------------
protected TreeViewItemViewModel(TreeViewItemViewModel parent, bool lazyLoadChildren)
{
_parentItem = parent;
Children = new ObservableCollection<TreeViewItemViewModel>();
if (lazyLoadChildren)
Children.Add(_dummyChild);
}
// This is used to create the DummyChild instance.
private TreeViewItemViewModel()
{
}
#endregion
#region ----------------PROPERTIES----------------
public ObservableCollection<TreeViewItemViewModel> Children
{
get;
set;
}
/// <summary>
/// Returns true if this object's Children have not yet been populated.
/// </summary>
public bool HasDummyChild
{
get { return this.Children.Count == 1 && this.Children[0] == _dummyChild; }
}
#region ----------------IsExpanded----------------
private bool _isExpanded;
/// <summary>
/// Gets/sets whether the TreeViewItem
/// associated with this object is expanded.
/// </summary>
public bool IsExpanded
{
get { return _isExpanded; }
set
{
if (value != _isExpanded)
{
_isExpanded = value;
this.RaisePropertyChanged("IsExpanded");
}
// Expand all the way up to the root.
if (_isExpanded && _parentItem != null)
_parentItem.IsExpanded = true;
// Lazy load the child items, if necessary.
if (this.HasDummyChild)
{
this.Children.Remove(_dummyChild);
this.LoadChildren();
}
}
}
#endregion
#region ----------------IsSelected----------------
private bool _isSelected;
/// <summary>
/// Gets/sets whether the TreeViewItem
/// associated with this object is selected.
/// </summary>
public bool IsSelected
{
get { return _isSelected; }
set
{
if (value != _isSelected)
{
_isSelected = value;
this.RaisePropertyChanged("IsSelected");
// Lazy load the child items, if necessary.
if (this.HasDummyChild)
{
this.Children.Remove(_dummyChild);
this.LoadChildren();
}
Mediator.Instance.NotifyColleagues(ViewModelMessages.DeviceContentChanged, this.Data);
}
}
}
#endregion
#endregion
#region ----------------CHILD LOADING----------------
/// <summary>
/// Invoked when the child items need to be loaded on demand.
/// Subclasses can override this to populate the Children collection.
/// </summary>
protected virtual void LoadChildren()
{
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
WPF and MVVM fan, I practice C # in all its forms from the beginning of the NET Framework without mentioning C ++ / MFC and other software packages such as databases, ASP, WCF, Web & Windows services, Application, and now Core and UWP.
In my wasted hours, I am guilty of having fathered C.B.R. and its cousins C.B.R. for WinRT and UWP on the Windows store.
But apart from that, I am a great handyman ... the house, a rocket stove to heat the jacuzzi and the last one: a wood oven for pizza, bread, and everything that goes inside
https://guillaumewaser.wordpress.com/
https://fouretcompagnie.wordpress.com/