如何强制绑定重新读取绑定的属性?

时间:2015-12-26 15:32:34

标签: c# wpf data-binding

我有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获得了我需要的地方。

实际上这只是该问题的重复,可能会被关闭和/或删除......

0 个答案:

没有答案