gpt4 book ai didi

wpf - DataGrid 将命令绑定(bind)到行选择

转载 作者:行者123 更新时间:2023-12-02 10:36:14 26 4
gpt4 key购买 nike

我想在用户选择 DataGrid 中的一行时执行命令。

我发现可以将单元格内容包装在按钮中(尽管我不想要按钮样式) - 但我不想在单元格级别执行此操作。

我还发现可以使用行为将命令链接到事件。但最好我不必诉诸行为来完成这样一个常见的任务。

是否可以通过普通的旧命令数据绑定(bind)来做到这一点?

因此:1) 用户单击 DataGrid 行 2) 触发 View 模型上的命令。

最佳答案

您应该使用“Interactivity”程序集和 SelectionChanged 事件。

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding People}">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
</DataGrid.Columns>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding MyCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>

其中“i”是命名空间:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

您还可以编写对 DataGrid 的 SelectedItem 属性的绑定(bind),并在 set 访问器中调用您的命令,但我上面向您提供的第一个解决方案更好。

如果您想从主视图模型调用命令并从 DataGrid 传递 SelectedItem,您可以使用 CommadParameter:

<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding MyCommand}"
CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
</i:EventTrigger>
</i:Interaction.Triggers>

当项目有自己的命令时,您可以使用以下代码:

<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding Path=SelectedItem.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
</i:EventTrigger>
</i:Interaction.Triggers>

或者,如果元素有自己的 View 模型并分配给它的DataContext,您可以使用以下代码:

 <i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding Path=SelectedItem.DataContext.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
</i:EventTrigger>
</i:Interaction.Triggers>

关于wpf - DataGrid 将命令绑定(bind)到行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15327227/

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