我有DataRow
。在这个DataRow
我有一个专栏,确认。
我有几个绑定到此列的值,如下所示:
<UserControl /*Stuff*/
DataContext="{Binding Path=DataRow, Source={x:Static Main:Class.Instance}}"
/*Stuff*/
<SolidColorBrush Color="{Binding Path=[Confirmed], Converter={StaticResource BRLC}, FallbackValue=Gray, TargetNullValue=Gray}"/>
/*More Stuff*/
</UserControl>
列使用字节类型值,我使用(在此示例中)以下转换器:
public class ByteRedLimeConverter : IValueConverter {
public object Convert( object value, Type targetType, object parameter, CultureInfo culture ) {
return ( ( byte )value == 1 ) ? Colors.Red : Colors.Lime;
}
public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture ) {
throw new NotImplementedException( );
}
}
我有一个按钮,它应该将属性绑定到的列的状态从0更改为1到0(基本上是切换它),然后调用我的ViewModel的OnPropertyChanged方法:
btnToggleDataRow.Click += ( S, E ) => {
Class.Instance.DataRow.SetField( "Confirmed", ( byte )(
Class.Instance.DataRow.Field<byte>( "Confirmed" ) == 1 ? 0 : 1 ) );
Class.Instance.OnPropertyChanged( "DataRow" );
};
我已经看过调试器进入了物业的吸气剂,但我所看到的并没有变化。我认为这是因为DataRow本身并没有改变;只是其中的价值。
如何强制绑定重新读取数据行中的值并传播更改后的值?
好的,我能够搞清楚。
我需要做的第一件事就是更改我用来传递实际纯色画笔的转换器,而不是传递颜色。
这样做可以让我在基于画笔的属性上创建一个绑定。
然后我只需要在具有绑定属性的对象上调用.GetBindingExpression( ... ).UpdateTarget( )
函数。
有点令人费解,但答案指示我从here获得了我需要的地方。
实际上这只是该问题的重复,可能会被关闭和/或删除......