【发布时间】:2011-09-15 19:04:47
【问题描述】:
如何使用 MVVM 在树视图中展开节点?
我有一个 x 级树视图,我创建了自己的类来将它绑定到 TreeView 控件。
当我创建TreeView 列表时,我确实设法将IsSelected 属性设置为true。
所以我只需要将我的IsSelected 值绑定到TreeViewItem IsSelected 属性,但这一点都不简单……
这是我的课:
public class HierarchicalItem : Model
{
public string Name { get; set; }
public int Id { get; set; }
private bool _IsSelected;
public bool IsSelected
{
get { return _IsSelected; }
set
{
if (_IsSelected != value)
{
_IsSelected = value;
RaisePropertyChanged("IsSelected");
}
}
}
private ObservableCollection<HierarchicalItem> _children;
public ObservableCollection<HierarchicalItem> Children
{
get
{
return _children;
}
set
{
if (_children != value)
{
_children = value;
RaisePropertyChanged("Children");
}
}
}
}
我用IsSelected 和IsExpanded 尝试过:
<controls:TreeView.ItemContainerStyle>
<Style TargetType="controls:TreeViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</controls:TreeView.ItemContainerStyle>
但它返回,IsSelected 和 IsExpanded 是只读的(这在 WPF 中有效)。
我已经为此寻找了许多解决方案,但没有一个适合我,因为我在列表框中有动态树视图,并且在每个树视图中,我必须将整个路径扩展到具有给定 Id 的节点。例如,我想在每个树视图中展开所有 Id = 30 的节点。
【问题讨论】:
标签: silverlight xaml treeview mvvm-light treeviewitem