gpt4 book ai didi

c# - 如何将网格绑定(bind)到 WPF 中的选定 TreeView 项

转载 作者:行者123 更新时间:2023-11-30 22:08:19 24 4
gpt4 key购买 nike

如何将网格绑定(bind)到 WPF 中选定的 TreeView 项?简而言之,当我的应用程序的用户单击 TreeView 项时,我想运行加载一些数据并将其显示在网格上的命令。基于项目的基础类型,我想绑定(bind)到不同的命令。

XAML

<TreeView ItemsSource="{Binding Path=SomeCollection, UpdateSourceTrigger=PropertyChanged}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=., Converter={StaticResource GetElementTypeConverter}}" Value="{x:Type Models:SomeType}">
// WHAT CODE GOES HERE?
</DataTrigger>
<DataTrigger Binding="{Binding Path=., Converter={StaticResource GetElementTypeConverter}}" Value="{x:Type Models:SomeOtherType}">
// WHAT CODE GOES HERE?
</DataTrigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>

我想以 MVVM 方式处理点击事件。

最佳答案

在WPF中,我们通过定义不同的DataTemplate来处理不同的数据类型。在您的情况下,您可能已经定义了一些。如果没有,现在就这样做,在这些 DataTemplate 中,您可以设置相关的 ICommand。您可以通过多种方式做到这一点,但一种简单的方法是在“空白”Button 中定义您的内容:

<DataTemplate DataType="{x:Type YourDataTypePrefix:YourDataType}">
<Button Command="{Binding SomeCommand}">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<!-- Define your YourDataType item content here -->
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
<DataTemplate DataType="{x:Type YourDataTypePrefix:OtherDataType}">
<Button Command="{Binding SomeOtherCommand}">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<!-- Define your OtherDataType item content here -->
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>

更新>>>

您说您不能使用那个Button 选择TreeViewItem,这似乎很奇怪。但是,您可以尝试使用 ToggleButton 绑定(bind)到 TreeViewItem.IsSelected 属性:

<ToggleButton Command="{Binding SomeCommand}" IsChecked="{Binding IsSelected, 
RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}">
<ToggleButton.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<!-- Define your YourDataType item content here -->
</Grid>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>

如果仍然不起作用,则使用 AttachedProperty 处理 DataTemplate 中 Grid 上的 PreviewMouseDown 事件您可以找到很多关于使用 AttachedProperty 处理事件的在线文档,所以我不会在这里重复。但是,如果您这样做了(这是更好的解决方案),那么您就可以这样做:

<DataTemplate DataType="{x:Type YourDataTypePrefix:YourDataType}">
<Grid Attached:MouseEvents.PreviewMouseDown="{Binding SomeCommand}">
<!-- Define your YourDataType item content here -->
</Grid>
</DataTemplate>

关于c# - 如何将网格绑定(bind)到 WPF 中的选定 TreeView 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22362672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com