2

ノードを追加/削除するオプションを含む ContextMenu を持つ TreeView があります。ツリーにノードを追加するとき、表示ツリーとバッキング データ オブジェクトのラッパーを追加することで追加要求を処理するビュー モデルにコマンドを送信しています。これを行うと、表示ツリーで新しく作成されたラッパーがツリービューの選択されたアイテムになるようにします。これどうやってするの?ビューモデルからツリービューにアクセスする方法がわかりません。また、アクセスする必要がないのではないかと思います。ありがとう。

4

2 に答える 2

1

TreeViewItem の ViewModel には、次のような「IsSelected」プロパティがあります。

/// <summary>
/// Base class for all ViewModel classes displayed by TreeViewItems.  
/// This acts as an adapter between a raw data object and a TreeViewItem.
/// </summary>
public class TreeViewItemViewModel : CoreViewModel
{
    #region Data

    private readonly ObservableCollection<TreeViewItemViewModel> _children;
    private readonly TreeViewItemViewModel _parent;

    private bool _isExpanded = false;
    private bool _isSelected;

    #endregion // Data

    #region Constructors
    #endregion // Constructors

    #region Children

    /// <summary>
    /// Returns the logical child items of this object.
    /// </summary>
    public ObservableCollection<TreeViewItemViewModel> Children
    {
        get { return _children; }
    }

    #endregion // Children

    #region HasLoadedChildren
    #endregion // HasLoadedChildren

    #region 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;
                OnPropertyChanged("IsExpanded");
            }

            // Expand all the way up to the root.
            if (_isExpanded && _parent != null)
                _parent.IsExpanded = true;

            // Lazy load the child items, if necessary.
            if (this.HasDummyChild)
            {
                this.Children.Remove(DummyChild);
                this.LoadChildren();
            }

        }
    }

    #endregion // IsExpanded

    #region 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;
                OnPropertyChanged("IsSelected");
            }
        }
    }

    #endregion // IsSelected

次に、XAML で TreeViewItem のスタイルを設定する必要があります。

<TreeView.Resources>
                <Style x:Key="TreeViewItemStyle" TargetType="{x:Type TreeViewItem}">
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                </Style>
</TreeView.Resources>

これで、新しく追加された項目で IsSelected プロパティを True に設定することで、TreeView の SelectedItem を設定できるようになりました。

于 2013-07-03T14:42:01.720 に答える