CommandParameter multibinding返回DataGrid控件和所选行中的自定义对象

时间:2012-10-08 15:10:35

标签: c# wpf mvvm wpfdatagrid

我正在使用.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的引用(或者有更好的解决方案)。

非常感谢

米克

1 个答案:

答案 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>