0

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

现在我想控制用户选择哪些项目。一个简单的例子是他不应该能够选择不同父母的子节点。但也有更多特定于 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

4

1 回答 1

0

通常,当将分层集合数据绑定到TreeViewWPF 中的 a 时,自定义数据项应具有IsSelected在其类中定义的属性。如果他们这样做,那么它可以是数据绑定到IsSelectedeach 的属性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按预期实现接口)。

于 2015-02-23T10:21:55.473 回答