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私はそれを試しました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 を設定する 1 つの方法は、確かにそれほどきれいではありませんが、TreeViewItem のコントロール テンプレートで ToggleButton にバインディングを設定することです。http://msdn.microsoft.com/en-us/library/dd728671(v=vs.95).aspxにアクセスすると、TreeViewItem の既定のコントロール テンプレートを取得できます。これをコピーして、次を置き換えることができます。

于 2011-09-15T10:54:51.683 に答える