我是WPF的新手,开发了一些带有代码绑定文件的应用程序,并在开始我当前的应用程序之前已经读过MVVM(通过Schifflett的“盒子”介绍)。
我正在使用的项目有一堆通用字符串属性,还有一个名为Hours的Dictionary属性,它将日期映射到工作小时数。
我的用户界面具有这些项目的DataGrid视图(绑定到ViewModel中的集合),以及允许用户选择日期(在ViewModel中将所选值绑定到SelectedDate
的组合框) 。 DataGrid的“小时”列需要显示一周中工作的小时数(即,与调用item.Hours[SelectedDate]
或类似方法具有相同的效果)。
最好的方法是什么?是否可以将变量放在绑定表达式中,如{Binding Hours[SelectedDate]}
?
答案 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中需要计算,我会使用此方法。值转换器非常适合这种重用。