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