从业务BIND命令对象MVVM查看(Bind command from Business objec

2019-06-24 11:23发布

我通过MVVM填充DataGrid的WPF中。 我有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}"/>
                <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中删除记录。

所以,我需要的是,我应该有在业务对象类,而不是视图模型类中具有命令的要求。

当我点击每一行的按钮时,对应的行应该被删除。

因此,我怎么能找到该项目在DataGrid中删除通过执行命令行中的业务对象类中选择,因为业务对象类没有关于DataGrid的项目的信息?

Answer 1:

首先,不要把你的命令到你的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}" />


文章来源: Bind command from Business object to View in MVVM