我有一个WPF MultiSelectTreeView (从这里下载:http://unclassified.software/en/source/multiselecttreeview)。
现在我要控制用户选择的项目。一个简单的例子是,他不应该能够选择不同父母的子节点。但是也有更多的特定于ViewModel的用例。
通过使用PreviewSelectionChanged事件、直接检查条件并相应设置Cancel标志,在窗口的代码隐藏中很容易实现这一点。但是,由于我想获得视图和ViewModel的分离,所以我在WindowViewModel中寻找一种方法来做到这一点。
当然,您也可以将检查提取到ViewModel并从视图中调用它,但是它看起来是错误的:
WindowViewModel _viewModel;
void PreviewSelectionChanged(object sender, PreviewSelectionChangedEventArgs e)
{
e.Cancel = !this._viewModel.CanSelect(e.Item as TreeItemViewModel);
}我希望任何人都有自己的想法。
发布于 2015-02-23 10:21:55
通常,当数据将分层集合绑定到WPF中的TreeView时,自定义数据项应该在其类中定义一个IsSelected属性。如果是这样,则可以将数据绑定到每个TreeViewItem的TreeViewItem属性中。
<TreeView ItemsSource="{Binding YourCollection}" ... >
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>完成此操作后,只需将该属性设置为true以选择项,将false设置为取消选择项即可。
// Select Item
dataObject.IsSelected = true;
// Deselect Item
dataObject.IsSelected = false;您可以向每个项的PropertyChanged事件添加一个处理程序,以检测IsSelected属性何时更改(如果它们按预期实现INotifyPropertyChanged接口)。
https://stackoverflow.com/questions/28669706
复制相似问题