无法使用 SelectedItem = null 清除 ListBox 的选择 - MVVM

8

我有以下数据模板(对应的视图模型没有展示):

<DataTemplate DataType="{x:Type logic:SnapshotListViewModel}">
    <ListBox ItemsSource="{Binding Snapshots}" />
</DataTemplate>

ItemsSource绑定到ViewModel中的Snapshots列表。我的目标是清除SelectedItem,使ListBox回到其初始未选中状态。ViewModel实现了IPropertyNotified。

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

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

在视图模型中,我将SelectedSnapshot设置为null,但什么也没有发生,即使调用了属性的RaisePropertyChanged。
我尝试使用SelectedIndex而不是SelectedItem,但仍然没有成功。
最终我找到了解决方案,将在下面详细介绍。
1个回答

15

忘记SelectedItem和SelectedIndex。答案是SelectedValue,以及IsSynchronizedWithCurrentItem="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");
            }
        }
    }

这是我能找到的唯一方法来重置我的列表框选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接