【发布时间】:2012-01-21 15:03:14
【问题描述】:
我在双向绑定 ListPicker 的 SelectedItem 时遇到问题
在我的 View XAML 中,我有这个 ListPicker:
<toolkit:ListPicker ItemsSource="{Binding AvailableTGs}"
SelectedItem="{Binding SelectedTG, Mode=TwoWay}"/>
在我的 ViewModel 上:
public IList<Term> AvailableTGs
{
get
{
return _AvailableTGs;
}
}
private Term _SelectedTG = null;
public Term SelectedTG
{
get
{
return _SelectedTG;
}
set
{
this.RaiseAndSetIfChanged(x => x.SelectedTaxGroup, ref _SelectedTG , value);
}
}
第一次,我设置AvailableTGs,绑定按预期更新。
ListPicker 选择第一个项目并将其推回SelectedTG。
问题是当我稍后更新AvailableTGs 时会发生这种情况:
-
Items在 ListPicker 上更新 -
SelectedItem显然不再是新列表的一部分, 因此 ListPicker 选择新列表的第一项并将其设置为SelectedItem
(此时,Picker 的Items已经包含了新的 List) - 这个新的
SelectedItem被推送到 ViewModel 到SelectedTG - 在那里,引发了 PropertyChanged 通知
- 这会导致 Picker 上的
SelectedItem再次更新 - 在设置
SelectedItem时,Picker 会验证它确实是当前Items集合的一部分。 - 此验证失败,因为此时,
Items集合再次指向旧的(第一个)List 实例。
我不知道为什么 Items Collection 在它已经有了新值之后会变回旧值。
ListPicker 的OnItemsChanged 方法不会在Items 指向新值与它再次具有旧值之间调用。
我将非常感谢任何能指出我所缺少的东西的人。
提前感谢
乔治
【问题讨论】:
标签: windows-phone-7 xaml data-binding silverlight-toolkit