m-y*_*m-y 30 wpf datagrid double-click commandbinding
我知道如何在我的DataGrid中使用MouseDoubleClick事件来获取selectedvalue,但是如何使用命令绑定呢?这样我的ViewModel就可以处理逻辑.
到目前为止,我有以下内容:
<DataGrid Name="TestGrid" Grid.Row="2" Grid.ColumnSpan="2" AutoGenerateColumns="True" MouseDoubleClick="TestGrid_MouseDoubleClick"
ItemsSource="{Binding Registrations}" SelectedValue="{Binding CurrentRegistration}" IsReadOnly="True" AlternationCount="2" GridLinesVisibility="None">
Run Code Online (Sandbox Code Playgroud)
我想摆脱MouseDoubleClick并适当地替换它.
Miz*_*zor 69
这里不需要附加行为或自定义DataGrid子类.
在你的DataGrid
,绑定ItemsSource
到ICollectionView
.这里的技巧是设置IsSynchronizedWithCurrentItem="True"
哪个选定的行将是当前项.
第二部分技巧是CommandParameter
使用正斜杠语法绑定到当前项.
双击一行时,将以单击的行作为参数执行该命令.
<DataGrid
ItemsSource="{Binding CollectionView}"
IsSynchronizedWithCurrentItem="True">
<DataGrid.InputBindings>
<MouseBinding
MouseAction="LeftDoubleClick"
Command="{Binding DoubleClickCommand}"
CommandParameter="{Binding CollectionView/}"/>
</DataGrid.InputBindings>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
这是视图模型的(简化)版本的外观:
class MyViewModel
{
public ICollectionView CollectionView { get; set; }
public ICommand DoubleClickCommand { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Tam*_*hen 23
另一种解决方案是添加输入绑定,并将selectedItem绑定到属性,以便您知道选择了哪一个:
<DataGrid SelectedItem="{Binding SelectedItem}">
<DataGrid.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding SomeCommand}"/>
</DataGrid.InputBindings>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)