2

私は.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を使用してフィルター条件を保存できるようにしたいのですが、呼び出しの1つに参照が必要ですデータグリッドへ

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 への参照を返す方法はありますか (または、より良い解決策があります)。

どうもありがとう

ミック

4

1 に答える 1

2

(1)DataGrid.SelectedItemをViewModelのプロパティにバインドします。

(2)グリッドを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 に答える