c# – 无法使用SelectedItem = null清除ListBox选择 – MVVM

前端之家收集整理的这篇文章主要介绍了c# – 无法使用SelectedItem = null清除ListBox选择 – MVVM前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下数据模板(以及相应的视图模型,未显示):
  1. <DataTemplate DataType="{x:Type logic:SnapshotListviewmodel}">
  2. <ListBox ItemsSource="{Binding Snapshots}" />
  3. </DataTemplate>

ItemsSource绑定到viewmodel中的Snapshot列表.我的目标是清除SelectedItem,因此列表框将返回其初始的未选定状态.视图模型实现IPropertyNotified.

我在XAML中添加了一个绑定,如下所示:

  1. <ListBox SelectedItem={Binding SelectedSnapshot} .... />

在视图模型中,我设置SelectedSnapshot = null,但没有任何反应,即使在属性调用了RaisePropertyChanged.

我再次尝试使用SelectedIndex而不是SelectedItem.仍然没有运气.

我终于找到了解决方案,我将在下面详述.

解决方法

忘记SelectedItem和SelectedIndex.答案是SelectedValue,以及IsSynchronizedWithCurrentItem =“True”.
  1. <ListBox IsSynchronizedWithCurrentItem="True"
  2. SelectedValue="{Binding SelectedSnapshotValue}" .../>

然后,当我在视图模型中调用ResetSelection()时,SelectedSnapshotValue被设置为null,

  1. void ResetSelection()
  2. {
  3. SelectedSnapshotValue = null;
  4. }

使用绑定属性更新数据模板中的绑定:

  1. private Snapshotviewmodel selectedSnapshotValue;
  2. public Snapshotviewmodel SelectedSnapshotValue
  3. {
  4. get { return selectedSnapshotValue; }
  5. set
  6. {
  7. if (selectedSnapshotValue != value)
  8. {
  9. selectedSnapshotValue = value;
  10. RaisePropertyChanged("SelectedSnapshotValue");
  11. }
  12. }
  13. }

这是我能够让我的列表框重置选择的唯一方法.

猜你在找的C#相关文章