1

MVVM を介して WPF に DataGrid を設定します。DataGrid に行と列を作成するための 4 つのプロパティを持つビジネス オブジェクトがあります。

<DataGrid CanUserAddRows="True" ItemsSource="{Binding Path=PersonsInfo}" AutoGenerateColumns="False"
                  CanUserDeleteRows="True" CanUserReorderColumns="True" 
                  CanUserSortColumns="True">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
                <DataGridTextColumn Header="Age" Binding="{Binding Path=Age}"/>
                <DataGridTextColumn Header="Date Of Birth" Binding="{Binding Path=DateOfBirth}"/>
                <DataGridTextColumn Header="Address" Binding="{Binding Path=Address}"/>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Grid>
                                <Button Content="Remove..." Margin="3" Command="{Binding Path=RemoveCommand}" />
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

上記のコードでボタンをクリックすると、DataGrid からレコードを削除する必要があります。

そのため、ViewModel クラス内ではなく、ビジネス オブジェクト クラス内に Command を持つ必要があるという要件が必要です。

各行のボタンをクリックしている間に、対応する行を削除する必要があります。

したがって、ビジネス オブジェクト クラスには DataGrid のアイテムに関する情報がないため、ビジネス オブジェクト クラスでコマンドを実行して行を削除するために DataGrid で選択されているアイテムをどのように見つけることができますか?

4

1 に答える 1

5

まず第一に、コマンドを に配置しないでください。Model代わりに を使用してバインドしRelativeSourceます。このような:

<Button Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.RemoveCommand}" />

DataGrid SelectedItem第二に、あなたはあなたの財産にあなたをバインドすることができますViewModel

<DataGrid SelectedItem="{Binding SelectedItemProperty, Mode=TwoWay}" .../>

または、選択したアイテムを に渡しますCommandParameter

<Button Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.RemoveCommand}" CommandParameter="{Binding}" />
于 2012-05-15T07:40:50.683 に答える