我正在尝试在我的窗口上创建一系列动态的计算字段。
现在,当表单加载如下时,我可以正常工作......
<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(),因为它们中有很多。
答案 0 :(得分:1)
数据绑定需要在绑定值更改时得到通知。您必须实施INotifiyPropertyChanged
才能执行此操作。 (或依赖属性,但这需要代表你做更多的工作。)不幸的是,WPF没有精神力量。