Не удается очистить выбор ListBox с помощью SelectedItem = null - MVVM

У меня есть следующий шаблон данных (и соответствующая модель представления, не показана):

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

ItemsSource связан со списком снимков, найденных внутри модели представления. Моя цель - очистить SelectedItem, чтобы список возвращался в исходное невыбранное состояние. Модель представления реализует IPropertyNotified.

Я добавил привязку в XAML примерно так:

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

В модели представления я установил SelectedSnapshot = null, но ничего не происходит, несмотря на то, что RaisePropertyChanged был вызван для свойства.

Я попытался снова с SelectedIndex вместо SelectedItem. Все еще не повезло.

Я наконец нашел решение, которое я подробно опишу ниже.

1 ответ

Решение

Забудьте SelectedItem и SelectedIndex. Ответ SelectedValue, наряду с IsSynchronizedWithCurrentItem= "True".

<ListBox IsSynchronizedWithCurrentItem="True" 
         SelectedValue="{Binding SelectedSnapshotValue}" .../>

Затем, когда я вызываю ResetSelection() в модели представления, для SelectedSnapshotValue устанавливается значение null,

void ResetSelection()
{
    SelectedSnapshotValue = null;
}

который обновляет привязку в шаблоне данных, используя свойство bound:

    private SnapshotViewModel selectedSnapshotValue;
    public SnapshotViewModel SelectedSnapshotValue
    {
        get { return selectedSnapshotValue; }
        set
        {
            if (selectedSnapshotValue != value)
            {
                selectedSnapshotValue = value;
                RaisePropertyChanged("SelectedSnapshotValue");
            }
        }
    }

Это единственный способ, которым я смог получить свой список для сброса выбора.

Другие вопросы по тегам