我正在使用.Net 4.0并且在视图中有一个DataGrid。我已经实现了这个http://www.codeproject.com/Articles/42227/Automatic-WPF-Toolkit-DataGrid-Filtering来提供过滤。 DataGrid的ItemsSource是我的自定义对象的可观察集合。 每行都有一个Button,单击该按钮时,会通过CommandParameter传回所选的自定义对象。
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding Path=DataContext.DeleteMyCustomObjectCommand,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}}}" CommandParameter="{Binding}" Width="20">
<Image Source="/MyThing;component/Images/delete.png" Height="16" Width="16"/>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
我希望能够使用此解决方案http://www.codeproject.com/Articles/42227/Automatic-WPF-Toolkit-DataGrid-Filtering?msg=3342202#xx3342202xx保存过滤条件,但其中一个调用需要引用数据网格
QueryController queryController= DataGridExtensions.GetDataGridFilterQueryController(myGrid1);
由于我正在使用MVVM,因此我的ViewModel中没有对DataGrid的引用。我的命令执行代码(在ViewModel中)目前看起来像这样
public void DeleteMyCustomObject(object param)
{
MyCustomObject m = param as MyCustomObject;
.....Deletion commands go here
有没有办法可以在我的Delete按钮的CommandParameter上使用multibindings从当前行传回自定义对象,以及对实际DataGrid的引用(或者有更好的解决方案)。
非常感谢
米克
答案 0 :(得分:2)
(1)将DataGrid.SelectedItem绑定到ViewModel中的Property。
(2)将Grid作为CommandParameter发送。
<DataGrid Grid.Column="2" Name="DG1" ItemsSource="{Binding}" SelectedItem="{Binding SelectedItem}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding Path=DataContext.DeleteMyCustomObjectCommand,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding RelativeSource=
{RelativeSource FindAncestor,
AncestorType={x:Type DataGrid}}}" Width="20">
<Image Source="/MyThing;component/Images/delete.png" Height="16" Width="16"/>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn>
<DataGrid.Columns>
</DataGrid>