如何使用MVVM处理数据网格单元更改?

bla*_*iet 5 wpf mvvm

我正在试图弄清楚如何在保持MVVM设计模式的同时处理数据网格单元中的更改.当用户更改单元格中的值时,我必须根据新单元格值关闭并更改一堆文件.我知道如何通过代码隐藏来轻松实现这一点,但是有更清晰,更MVVM的方式来执行命令绑定吗?

Vla*_*ani 13

通常我会使用Galasoft的交互触发器执行此操作.

 <DataGrid IsReadOnly="False">
            <e:Interaction.Triggers>
                <e:EventTrigger EventName="CellEditEnding">
                    <GalaSoft_MvvmLight_Command:EventToCommand PassEventArgsToCommand="True" Command="{Binding CellEditEndingCommand}"/>
                </e:EventTrigger>
            </e:Interaction.Triggers>
        <DataGrid.Columns>
               ...                        
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

然后在ViewModel中创建通用的RelayCommand,其中泛型类型是相应EventArgs的类型.

RelayCommand<DataGridCellEditEndingEventArgs> CellEditEndingCommand {get; set;}
Run Code Online (Sandbox Code Playgroud)

初始化:

CellEditEndingCommand = new RelayCommand<DataGridCellEditEndingEventArgs>(args=>DoSomething());
Run Code Online (Sandbox Code Playgroud)


Dam*_*cus 2

让我们假设您的DataGrid' 'ItemsSource已绑定 ( TwoWay-mode) 到您的 ' 中的某些内容ViewModel,让我们称之为它CustomObject或其他什么。

让我们假设特定的属性DataGridCell绑定到名为 的属性SomeProperty,该属性声明如下:

private string someProperty;
public string SomeProperty {
  get { return someProperty; }
  set {
    someProperty = value;
    //Fire OnPropertyChanged here
  }
}
Run Code Online (Sandbox Code Playgroud)

就在集合上放置一个断点。然后,修改视图中的单元格:将到达断点。

这允许您模拟一个事件:每次调用该集合时,这意味着单元格将发生变化,现在可以通过更改过程执行您想要的任何操作(例如,您可以通过测试来测试新值,或者保留最后一个值value)值,通过someProperty在该行之前保存某处someProperty = value;