我有这样的标签:
<Label Name="LblUsersWithHair">
<Binding Path="Users"
ElementName="ElementSelf"
Converter="{StaticResource Converter_UsersWithHairPresenter}" />
</Label>
转换器:
...
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var users = value as ObservableCollection<Users>;
if (users == null) return null;
var usersWithHair = users.Count(user => user.HasHair == true);
return "There are " + usersWithHair + " there has hair.";
}
...
现在的问题是,当'HasHair'属性发生变化时,标签当然不会更新,因为集合没有改变。但是,当设置此属性时,如何强制标签重新绑定?
上面的例子非常简单,但希望你能帮助我......:o)
答案 0 :(得分:2)
您需要在INotifyPropertyChanged
类中为Users
属性实施HasHair
。
查看此帖子How to force ListBox to reload properties of ListBoxItems
答案 1 :(得分:1)
如果列表触发ListChanged事件,您的Binding将仅更新。这通常只发生在列表中的结构更改(添加/删除/替换)上,而不是单个列表项更改 - 即使它确实实现了INotifyPropertyChanged。 为项目实施INotifyPropertyChanged后,您仍需要执行以下两个选项之一:
答案 2 :(得分:0)
在你的时候,你可以将标签声明简化为:
<Label Content="{Binding Users, Converter={StaticResource Converter_UsersWithHairPresenter}"/>
您还可以在转换器中放置一个调试断点,首先查看它是否被调用,并检查输出窗口以查看是否报告了任何数据绑定错误。
HTH,
Berryl