Не удается очистить выбор 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");
}
}
}
Это единственный способ, которым я смог получить свой список для сброса выбора.