2012-06-14 40 views
0

我正尝试在我的窗口上创建一系列动态计算字段。在WPF中创建一个动态计算字段

现在我有工作当窗体加载如下...

<Window.Resources> 
    <src:PaymentVarianceConverter x:Key="PaymentConverter" /> 
</Window.Resources> 

<TextBlock Text="{Binding Path=., Converter={StaticResource PaymentConverter}, 
        ConverterParameter=CASH, StringFormat={}{0:C}, Mode=OneWay}"/> 
<TextBlock Text="{Binding Path=., Converter={StaticResource PaymentConverter}, 
        ConverterParameter=CHECK, StringFormat={}{0:C}, Mode=OneWay}"/> 

这里是转换器:

public sealed class PaymentVarianceConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (!(value is Route)) 
      return null; 
     var route = value as Route; 

     switch (parameter.ToString()) 
     { 
      case "CASH": 
       return route.CashTotal - route.TotalExpectedCash; 
      case "CHECK": 
       return route.CheckTotal - route.TotalExpectedCheck; 
      default: 
       return null; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException("ConvertBack Not implemented"); 
    } 
} 

这一切都进展顺利,但它不会刷新时基础值(即route.CashTotal)发生变化。

有什么办法可以让我动态刷新? 我想避免在源对象上创建它们的属性,并为它们中的每一个调用OnPropertyChanged(),因为它们中有很多。

回答

1

当绑定值发生变化时,需要通知数据绑定。你将不得不实施INotifiyPropertyChanged来做到这一点。 (或依赖属性,但这需要您代表更多的工作。)不幸的是,WPF没有通灵能力。

+0

感谢您的快速回复。我是WPF的新手,我来自Win Forms世界。不确定是否有某种方法将TextBox的文本属性绑定到窗口上其他文本框的计算。 –

+0

@GabrielMontanaro:您可以在控件之间创建数据绑定,因为“TextBox.Text”属性是一个依赖属性,可以与绑定框架进行交互,并在发生更改时发送通知。然而,你似乎直接绑定到'DataContext',然后必须实现一种方式来通知数据绑定框架的变化。 –