c# - No se puede borrar la selección de ListBox con SelectedItem=null-MVVM
wpf selectedvalue (1)
Olvide SelectedItem y SelectedIndex. La respuesta es SelectedValue , junto con IsSynchronizedWithCurrentItem = "True".
<ListBox IsSynchronizedWithCurrentItem="True"
SelectedValue="{Binding SelectedSnapshotValue}" .../>
Luego, cuando llamo a ResetSelection () en el modelo de vista, SelectedSnapshotValue se establece en nulo,
void ResetSelection()
{
SelectedSnapshotValue = null;
}
que actualiza el enlace en la plantilla de datos, usando la propiedad vinculada:
private SnapshotViewModel selectedSnapshotValue;
public SnapshotViewModel SelectedSnapshotValue
{
get { return selectedSnapshotValue; }
set
{
if (selectedSnapshotValue != value)
{
selectedSnapshotValue = value;
RaisePropertyChanged("SelectedSnapshotValue");
}
}
}
Esta es la única forma en que pude obtener mi listbox para restablecer la selección.
Tengo la siguiente plantilla de datos (y un modelo de vista correspondiente, no se muestra):
<DataTemplate DataType="{x:Type logic:SnapshotListViewModel}">
<ListBox ItemsSource="{Binding Snapshots}" />
</DataTemplate>
ItemsSource está vinculado a una lista de instantáneas, que se encuentra dentro del modelo de vista. Mi objetivo es borrar SelectedItem, por lo que el cuadro de lista vuelve a su estado inicial no seleccionado. El modelo de vista implementa IPropertyNotified.
Agregué un enlace en el XAML así:
<ListBox SelectedItem={Binding SelectedSnapshot} .... />
En el modelo de vista, configuro SelectedSnapshot = null, pero no sucede nada, aunque se llamó a RaisePropertyChanged en la propiedad.
Intenté de nuevo con SelectedIndex en lugar de SelectedItem. Todavía sin suerte.
Finalmente encontré la solución, que detallaré a continuación.