首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何控制ViewModel of MultiSelectTreeView的选择

如何控制ViewModel of MultiSelectTreeView的选择
EN

Stack Overflow用户
提问于 2015-02-23 08:40:30
回答 1查看 237关注 0票数 0

我有一个WPF MultiSelectTreeView (从这里下载:http://unclassified.software/en/source/multiselecttreeview)。

现在我要控制用户选择的项目。一个简单的例子是,他不应该能够选择不同父母的子节点。但是也有更多的特定于ViewModel的用例。

通过使用PreviewSelectionChanged事件、直接检查条件并相应设置Cancel标志,在窗口的代码隐藏中很容易实现这一点。但是,由于我想获得视图和ViewModel的分离,所以我在WindowViewModel中寻找一种方法来做到这一点。

当然,您也可以将检查提取到ViewModel并从视图中调用它,但是它看起来是错误的:

代码语言:javascript
运行
复制
WindowViewModel _viewModel;

void PreviewSelectionChanged(object sender, PreviewSelectionChangedEventArgs e)
{
     e.Cancel = !this._viewModel.CanSelect(e.Item as TreeItemViewModel);
}

我希望任何人都有自己的想法。

  • timnot90
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 10:21:55

通常,当数据将分层集合绑定到WPF中的TreeView时,自定义数据项应该在其类中定义一个IsSelected属性。如果是这样,则可以将数据绑定到每个TreeViewItemTreeViewItem属性中。

代码语言:javascript
运行
复制
<TreeView ItemsSource="{Binding YourCollection}" ... >
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsSelected" Value="{Binding IsSelected}" />
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>

完成此操作后,只需将该属性设置为true以选择项,将false设置为取消选择项即可。

代码语言:javascript
运行
复制
// Select Item
dataObject.IsSelected = true;

// Deselect Item
dataObject.IsSelected = false;

您可以向每个项的PropertyChanged事件添加一个处理程序,以检测IsSelected属性何时更改(如果它们按预期实现INotifyPropertyChanged接口)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28669706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档