1

如何使用 MVVM 在树视图中展开节点?

我有斧头级树视图,我创建了自己的类来将它绑定到 TreeView 控件。

当我创建列表时,我确实设法将IsSelected属性设置为。所以我只需要将我的值绑定到属性上,但这根本不是那么简单......trueTreeViewIsSelectedTreeViewItem 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我用and试过了IsExpanded

<controls:TreeView.ItemContainerStyle>
    <Style TargetType="controls:TreeViewItem">
        <Setter Property="IsSelected" Value="{Binding IsSelected}" />
    </Style>
</controls:TreeView.ItemContainerStyle>

但它返回,IsSelected并且IsExpanded是只读的(这在 WPF 中有效)。

我已经为此寻找了很多解决方案,但没有一个对我有用,因为我在列表框中有动态树视图,并且在每个树视图中,我必须将整个路径扩展到具有给定Id. 例如,我想在每个树视图中展开所有 Id = 30 的节点。

4

1 回答 1

0

不幸的是,在 Silverlight 4 中无法在样式设置器上设置绑定。

设置 IsExpanded 的一种方法是在 TreeViewItem 的控件模板中设置 ToggleButton 上的绑定,这当然不是那么漂亮。如果您访问http://msdn.microsoft.com/en-us/library/dd728671(v=vs.95).aspx,您可以获得 TreeViewItem 的默认控件模板。您可以复制它并替换以下内容:

于 2011-09-15T10:54:51.683 回答