gpt4 book ai didi

wpf - 将业务对象的命令绑定(bind)到 MVVM 中的 View

转载 作者:行者123 更新时间:2023-12-03 10:20:57 25 4
gpt4 key购买 nike

我通过 MVVM 在 WPF 中填充 DataGrid。我有具有 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 中删除记录。

所以我需要这样的要求,我应该在业务对象类中拥有命令,而不是在 ViewModel 类中。

当我单击每一行中的按钮时,应该删除相应的行。

因此,由于业务对象类没有有关 DataGrid 项目的信息,如何通过业务对象类中的命令执行找到在 DataGrid 中选择了哪个项目以删除行?

最佳答案

首先,不要将您的命令放入您的Model ,而是通过 RelativeSource 使用绑定(bind).像这样:

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

二、你可以绑定(bind)你的 DataGrid SelectedItem给你的属性(property) ViewModel
<DataGrid SelectedItem="{Binding SelectedItemProperty, Mode=TwoWay}" .../>

或通过 CommandParameter 传递您选择的项目.
<Button Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.RemoveCommand}" CommandParameter="{Binding}" />

关于wpf - 将业务对象的命令绑定(bind)到 MVVM 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10596094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com