根据另一个属性的值更改WPF数据绑定

时间:2011-03-21 02:33:58

标签: wpf mvvm binding

我是WPF的新手,开发了一些带有代码绑定文件的应用程序,并在开始我当前的应用程序之前已经读过MVVM(通过Schifflett的“盒子”介绍)。

我正在使用的项目有一堆通用字符串属性,还有一个名为Hours的Dictionary属性,它将日期映射到工作小时数。

我的用户界面具有这些项目的DataGrid视图(绑定到ViewModel中的集合),以及允许用户选择日期(在ViewModel中将所选值绑定到SelectedDate的组合框) 。 DataGrid的“小时”列需要显示一周中工作的小时数(即,与调用item.Hours[SelectedDate]或类似方法具有相同的效果)。

最好的方法是什么?是否可以将变量放在绑定表达式中,如{Binding Hours[SelectedDate]}

2 个答案:

答案 0 :(得分:0)

如果您绑定的属性具有索引器,则可以绑定它。你只需要在合适的时间为这个索引器提高INotifyPropertyChanged。

编辑:绑定表达式中的变量不起作用,但您可以绑定到Hours并使用转换器和SelectedDate作为转换参数来获取所需的值。当“SeletedDate”改变时,你应该为“小时”提高INotifyPropertyChanged。

答案 1 :(得分:0)

立即想到的两个解决方案是:

1)创建一个基于SelectedDate的小时属性:

public int Hours {get { return calculateHours(SelectedDate); } }

“calculateHours”可以是一种方法,也可以将计算放入Setter本身。确保在SelectedDate设置时,您也将PropertyChanged提升为“小时”。

如果此小时计算仅用于此ViewModel中的此视图,我将使用此方法。

2)创建一个接受日期并返回计算值的值转换器。然后将Hours绑定到SelectedDate属性:

<TextBlock Text="{Binding SelectedDate, Converter={StaticResource DateToHoursConverter}}"

如果在多个视图或多个ViewModel中需要计算,我会使用此方法。值转换器非常适合这种重用。