我正在试图弄清楚如何在保持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)
让我们假设您的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;)
| 归档时间: |
|
| 查看次数: |
11761 次 |
| 最近记录: |