我有一个mvvm应用程序,其中我在Wpf中有一个DataGrid,并希望得到通知,如果用户更改列中的值。
所有dataGridColumns都有一个绑定到我的视图模型,如果它被更改,它调用PropertyChanged命令。现在的问题是,我如何确定是否属性已被用户或代码更改?因为我只希望在用户手动更改的相应行中添加注释。
感兴趣的列在wpf中是这样实现的:
<DataGridTextColumn
Header="DIL"
Binding="{Binding DilutionFactor, StringFormat={}{0:n4}}"
Visibility="{Binding Value,
Source={StaticResource DilVis},
Converter={StaticResource BooleanToVisibilityConverter}}"
IsReadOnly="False"/>
绑定到ViewModel属性:
public double DilutionFactor
{
get { return _dilutionFactor; }
set
{
_dilutionFactor = value;
Update(); // PropertyChanged Command
UpdatePipetteVolumes(); // function to update corresponding volumes
}
}
是否有一个事件或任何我可以用来触发一个方法,当用户改变DIL列的值,这是不触发当代码更新值?
您可以在每次通过编程更改值之前设置一个布尔标志。然后在属性设置器中,您可以检查该属性以查看用户是否调用了更改。但是,对于频繁使用的属性,此方法可能需要大量代码更改。
的另一种方法:添加第二个属性,该属性只设置并返回现有属性。然后为数据网格绑定使用这个新属性:
public double DilutionFactorUser
{
get { return this.DilutionFactor; }
set
{
this.DilutionFactor = value;
// Here comes the code that is only executed on user-invoked changes
}
}
public double DilutionFactor
{
get { return _dilutionFactor; }
set
{
_dilutionFactor = value;
Update(); // PropertyChanged Command
UpdatePipetteVolumes(); // function to update corresponding volumes
}
}
设置你的Datagrid绑定到DilutionFactorUser
您也可以使用DataGrid。cellleditending(对象发送者,DataGridCellEditEndingEventArgs e)事件,而不是查找属性。e.Row.Item将包含要绑定到的数据。