I implemented a WPF load-on-demand treeview like described in this (very good) article.
In the mentioned solution a dummy element is used to preserve the expand +
icon / treeview item behavior. The dummy item is replaced with real data, when the user clicks on the expander.
I want to refine the model by adding a property public bool HasChildren { get { ... } }
to my backing TreeNodeViewModel
.
Question:
How can I bind this property to hide/show the expand icon (in XAML)? I am not able to find a suitable trigger/setter combination.
(INotifyPropertyChanged is properly implemented.)
Thanks for your time.
Update 1:
I want to use my property public bool HasChildren
instead of using the dummy element.
Determining whether or not an item has children is somewhat costly, but still much cheaper than fetching the children.
After quickly looking into Josh's code, I found this constructor:
protected TreeViewItemViewModel(TreeViewItemViewModel parent, bool lazyLoadChildren)
{
_parent = parent;
_children = new ObservableCollection<TreeViewItemViewModel>();
if (lazyLoadChildren)
_children.Add(DummyChild);
}
So, if you pass false
for the lazyLoadChildren
parameter from your inheriting ViewModel classes, the + icon should not appear because the DummyChild is not added. Since you seem to know whether your items have children or not, you should be able to pass the appropriate value for the lazyLoadChildren
property. Or am I missing something?