Ben*_*sen 16 data-binding wpf select datagrid command
我想在用户选择DataGrid中的行时执行命令.
我看到有可能将单元格内容包装在按钮中(虽然我不想要按钮样式) - 但我不想在单元级别进行.
我还看到可以使用行为将命令链接到事件.但最好不要为了这样一个共同的任务而采取行动.
是否可以通过普通的旧命令数据绑定来完成此操作?
所以:1)用户点击DataGrid行2)命令对视图模型进行了触发.
提前致谢.
kma*_*zek 44
您应该使用"交互"程序集和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>
Run Code Online (Sandbox Code Playgroud)
其中"i"是命名空间:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
Run Code Online (Sandbox Code Playgroud)
您也可以编写绑定到SelectedItemDataGrid的属性,并在set访问器中调用您的命令,但我上面提到的第一个解决方案更好.
如果要从主视图模型调用命令并SelectedItem从中传递,则DataGrid可以使用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>
Run Code Online (Sandbox Code Playgroud)
当项目有自己的命令时,您可以使用以下代码:
<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>
Run Code Online (Sandbox Code Playgroud)
或者,如果元素具有分配给它的自己的视图模型,则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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24525 次 |
| 最近记录: |