2

我正在使用 .Net 4.0 并在视图中有一个 DataGrid。我已经实现了这个http://www.codeproject.com/Articles/42227/Automatic-WPF-Toolkit-DataGrid-Filtering来提供过滤。DataGrid 的 ItemsSource 是我的自定义对象的可观察集合。每行都有一个按钮,单击该按钮时,通过 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 上使用多重绑定从当前行传回自定义对象,以及对实际 DataGrid 的引用(或者有更好的解决方案)。

非常感谢

米克

4

1 回答 1

2

(1) 将 DataGrid.SelectedItem 绑定到 ViewModel 中的属性。

(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>
于 2012-10-08T16:21:31.563 回答