我有以下数据模板(以及相应的视图模型,未显示):
<DataTemplate DataType="{x:Type logic:SnapshotListViewModel}">
<ListBox ItemsSource="{Binding Snapshots}" />
</DataTemplate>
ItemsSource 绑定到视图模型内的快照列表。我的目标是清除 SelectedItem,以便列表框返回到其初始的未选定状态。视图模型实现 IPropertyNotified。
我在 XAML 中添加了一个绑定,如下所示:
<ListBox SelectedItem={Binding SelectedSnapshot} .... />
在视图模型中,我设置 SelectedSnapshot = null,但即使在属性上调用 RaisePropertyChanged,也没有任何反应。
我再次尝试使用 SelectedIndex 而不是 SelectedItem。还是没有运气。
我终于找到了解决方案,我将在下面详细说明。
忘记 SelectedItem 和 SelectedIndex。答案是选定值, 随着与当前项目同步="True".
<ListBox IsSynchronizedWithCurrentItem="True"
SelectedValue="{Binding SelectedSnapshotValue}" .../>
然后,当我在视图模型中调用 ResetSelection() 时,SelectedSnapshotValue 设置为 null,
void ResetSelection()
{
SelectedSnapshotValue = null;
}
它使用绑定属性更新数据模板中的绑定:
private SnapshotViewModel selectedSnapshotValue;
public SnapshotViewModel SelectedSnapshotValue
{
get { return selectedSnapshotValue; }
set
{
if (selectedSnapshotValue != value)
{
selectedSnapshotValue = value;
RaisePropertyChanged("SelectedSnapshotValue");
}
}
}
这是我能够让列表框重置选择的唯一方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)