如何从 MultiSelectTreeView 的 ViewModel 控制选择
How to control selection from ViewModel of MultiSelectTreeView
我有一个 WPF MultiSelectTreeView(从这里下载:http://unclassified.software/en/source/multiselecttreeview)。
现在我想控制用户 select 的哪些项目。一个简单的例子就是他不应该select不同父节点的子节点。但也有更多特定于 ViewModel 的用例。
通过使用 PreviewSelectionChanged 事件,在 Window 的代码隐藏中很容易实现这一点,直接检查条件并相应地设置取消标志。但是由于我想获得 View 和 ViewModel 的分离,我正在寻找一种在我的 WindowViewModel.
中执行此操作的方法
当然你也可以将检查提取到 ViewModel 并从视图中调用它,但它看起来不对:
WindowViewModel _viewModel;
void PreviewSelectionChanged(object sender, PreviewSelectionChangedEventArgs e)
{
e.Cancel = !this._viewModel.CanSelect(e.Item as TreeItemViewModel);
}
我希望任何人都有想法。
- timnot90
通常,当数据将分层集合绑定到 WPF 中的 TreeView
时,自定义数据项应在其 class 中定义 IsSelected
属性。如果他们这样做,那么它可以是数据绑定到每个 TreeViewItem
:
的 IsSelected
属性
<TreeView ItemsSource="{Binding YourCollection}" ... >
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
完成后,您只需将 属性 设置为 true
到 select 一个项目,然后将 false
设置为 deselect 一个项目.
// Select Item
dataObject.IsSelected = true;
// Deselect Item
dataObject.IsSelected = false;
您可以向每个项目的 PropertyChanged
事件添加处理程序以检测 IsSelected
属性 何时更改(如果它们按预期实现了 INotifyPropertyChanged
接口) .
我有一个 WPF MultiSelectTreeView(从这里下载:http://unclassified.software/en/source/multiselecttreeview)。
现在我想控制用户 select 的哪些项目。一个简单的例子就是他不应该select不同父节点的子节点。但也有更多特定于 ViewModel 的用例。
通过使用 PreviewSelectionChanged 事件,在 Window 的代码隐藏中很容易实现这一点,直接检查条件并相应地设置取消标志。但是由于我想获得 View 和 ViewModel 的分离,我正在寻找一种在我的 WindowViewModel.
中执行此操作的方法当然你也可以将检查提取到 ViewModel 并从视图中调用它,但它看起来不对:
WindowViewModel _viewModel;
void PreviewSelectionChanged(object sender, PreviewSelectionChangedEventArgs e)
{
e.Cancel = !this._viewModel.CanSelect(e.Item as TreeItemViewModel);
}
我希望任何人都有想法。
- timnot90
通常,当数据将分层集合绑定到 WPF 中的 TreeView
时,自定义数据项应在其 class 中定义 IsSelected
属性。如果他们这样做,那么它可以是数据绑定到每个 TreeViewItem
:
IsSelected
属性
<TreeView ItemsSource="{Binding YourCollection}" ... >
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
完成后,您只需将 属性 设置为 true
到 select 一个项目,然后将 false
设置为 deselect 一个项目.
// Select Item
dataObject.IsSelected = true;
// Deselect Item
dataObject.IsSelected = false;
您可以向每个项目的 PropertyChanged
事件添加处理程序以检测 IsSelected
属性 何时更改(如果它们按预期实现了 INotifyPropertyChanged
接口) .