当使用MVVM更改一行DataGrid时,将更改应用于Model

本文关键字:DataGrid Model 一行 应用于 MVVM | 更新日期: 2023-09-27 18:04:19

我有一个简单的场景,我有一个绑定到ObservableCollection的DataGrid,我希望用户能够动态地添加一个新的ComplexType Item(这意味着一行)。我的意思是,每当用户完成输入行数据时,数据模型就需要更新。问题是ViewModel的绑定在一行更改或添加时不被调用。有人知道如何在ViewModel中处理这种情况吗?我的直觉告诉我,这应该是很容易在MVVM,但我卡住了!这是我的xaml:

<DataGrid x:Name="gd_Users"  CanUserDeleteRows="True" CanUserAddRows="True" CanUserAddRows="True" AutoGenerateColumns="False" ItemsSource="{Binding UserCollection,Mode=TwoWay}" SelectedItem="{Binding SelectedUser}" Margin="1,5" Grid.Column="1">
    <DataGrid.Columns>
        <DataGridTextColumn Header="header1" Width="50"  Binding="{Binding u_Code}"/>
        <DataGridTextColumn Header="Header2" Width="100" Binding="{Binding u_FirstName}"/>
        <DataGridTextColumn Header="header3" Width="150" Binding="{Binding u_LastName}" />
    </DataGrid.Columns>
</DataGrid>

p。S:我不想在

当使用MVVM更改一行DataGrid时,将更改应用于Model

后面的代码中使用像"RowEditEnding"这样的事件

您需要在视图模型中为数据行实现IEditableObject:

public class RowViewModel : IEditableObject
{
    public int Id { get; set; }
    public string Name { get; set; }
    public void BeginEdit()
    {
    }
    public void CancelEdit()
    {
    }
    public void EndEdit()
    {
        // this method is called, when user has ended editing
        // TODO: call service layer to update model
    }
}

DataGrid知道这个接口,如果VM实现了这个接口,DataGrid调用它的方法