Я думаю, что эту проблему нужно решить по-другому, но ...
- У вас будет команда на вашем
рассматривать модель как собственность.
- Вы получаете из дерева и
древовидный элемент.
- Вы даете элемент дерева
свойство команды, вы связываете это с
команда вашей модели представления в
дерево представлений itemContainerStyle (в
XAML)
- Вы переопределяете мышь предварительного просмотра
вниз на древовидном элементе для вызова
команда
вот пример TreeViewItem
public class EditableTreeViewItem : TreeViewItem {
public ICommand DoubleClickCommand {
get { return (ICommand)GetValue(DoubleClickCommandProperty); }
set { SetValue(DoubleClickCommandProperty, value); }
}
// Using a DependencyProperty as the backing store for DoubleClickCommand. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DoubleClickCommandProperty =
DependencyProperty.Register("DoubleClickCommand", typeof(ICommand), typeof(EditableTreeView), new UIPropertyMetadata(null));
protected override void OnPreviewMouseDoubleClick(MouseButtonEventArgs e) {
if (this.DoubleClickCommand!= null) {
this.DoubleClickCommand.Execute(this.DataContext);
e.Handled = true;
}
base.OnPreviewMouseDoubleClick(e);
}
protected override DependencyObject GetContainerForItemOverride() {
return new EditableTreeViewItem();
}
protected override bool IsItemItsOwnContainerOverride(object item) {
return item is EditableTreeViewItem;
}
}
и дерево для использования этого предмета
public class EditableTreeView : TreeView {
//generate the tree view item
protected override DependencyObject GetContainerForItemOverride() {
EditableTreeViewItem item = new EditableTreeViewItem();
return item;
}
protected override bool IsItemItsOwnContainerOverride(object item) {
return item is EditableTreeViewItem;
}
}
теперь, как уже говорили некоторые умные люди, вам лучше использовать меню и стилизовать его. теперь, когда вы дважды щелкнете по элементу дерева, он будет вызывать команду, а не разворачиваться / сворачиваться, как следует.
это то, как вы будете использовать его в xaml
<controls:EditableTreeViewMode=OneWayToSource}"
ItemsSource="{Binding Path=MyItemsSource}">
<controls:EditableTreeView.ItemContainerStyle>
<!-- This Style binds a TreeViewItem to a the ViewModel. -->
<Style
TargetType="{x:Type controls:EditableTreeViewItem}">
<Setter
Property="DoubleClickCommand"
Value="{Binding OpenNewWindowCommand}" />
</Style>
</controls:EditableTreeView.ItemContainerStyle>
</controls:EditableTreeView>