2011-03-21 90 views
0

我对WPF来说是新手,已经开发了一些带代码包含文件的应用程序,并且在启动之前通过MVVM(通过Schifflett's in the box'介绍)我目前的应用程序基于另一个属性的值更改WPF数据绑定

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

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

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

+0

我不确定我是否理解。你有一个有工作日期和小时数集合的数据网格。还有一个组合框,可以让你选择日期。你为什么需要两个? – 2011-03-21 09:36:53

回答

0

两个解决方案,马上想到的是这些:

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

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

“calculateHours”既可以是一个方法,或者你可以把计算放在Setter本身中。确保每当SelectedDate设置为PropertyChanged为“Hours”时。

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

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

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

如果在多个视图或多个的ViewModels需要计算我会用这种方法。价值转换器非常适合这种重用。

+0

价值转换器是我之后的解决方案,谢谢! – 2011-03-21 23:42:47

0

如果你绑定的属性有索引器,你可以绑定它。您只需在适当的时间为此索引器提出INotifyPropertyChanged。

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