Вопрос по wpf, business-objects, mvvm, datagrid – Привязать команду из бизнес-объекта к представлению в MVVM

1

Я заполняю DataGrid в WPF через MVVM. У меня есть бизнес-объект с 4 свойствами для создания строк и столбцов в DataGrid.

<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}"/>
                <Da,taGridTextColumn 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.

Пока я нажимаю кнопку в каждой строке, соответствующая строка должна быть удалена.

Как узнать, какой элемент выбран в DataGrid для удаления строки путем выполнения команды в классе бизнес-объектов, поскольку в классе бизнес-объектов нет информации об элементах DataGrid?

Ваш Ответ

1   ответ
4

Прежде всего, не помещайте свою команду в свой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}" />

Похожие вопросы