G'day!¿Puede una WPF ComboBox mostrar texto alternativo cuando su selección es nula?
Quiero que mi WPF ComboBox
muestre algún texto alternativo cuando su selección enlazada a datos es null
.
El modelo de vista tiene las propiedades esperadas:
public ThingoSelectionViewModel : INotifyPropertyChanged {
public ThingoSelectionViewModel(IProvideThingos) {
this.Thingos = IProvideThingos.GetThingos();
}
public ObservableCollection<Thingo> Thingos { get; set; }
public Thingo SelectedThingo {
get { return this.selectedThingo; }
set { // set this.selectedThingo and raise the property change notification
}
// ...
}
La vista ha XAML de unión al modelo de vista de la forma esperada:
<ComboBox x:Name="ComboboxDrive" SelectedItem="{Binding Path=SelectedThingo}"
IsEditable="false" HorizontalAlignment="Left" MinWidth="100"
IsReadOnly="false" Style="{StaticResource ComboboxStyle}"
Grid.Column="1" Grid.Row="1" Margin="5" SelectedIndex="0">
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem IsEnabled="False">Select a thingo</ComboBoxItem>
<CollectionContainer
Collection="{Binding Source={StaticResource Thingos}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
El ComboBoxItem
encajada en la parte superior es una forma de obtener un elemento adicional en la parte superior. Es puro cromado: el modelo de vista se mantiene puro y simple. Solo hay un problema: los usuarios quieren que se muestre "Seleccionar una cosa" siempre que la selección de ComboBox 'sea nula.
Los usuarios hacen no quieren una cosa seleccionada por defecto. Quieren ver un mensaje indicándoles que seleccionen una cosa.
me gustaría evitar tener que contaminan el modelo de vista con una clase ThingoWrapper
con un método ToString
regresar "Seleccionar un thingo" si su propiedad .ActualThingo
es nulo, envolviendo cada Thingo
como lo pueblan Thingos
, y averiguar alguna manera de evitar que el usuario seleccione nulled Thingo
.
¿Hay alguna manera de mostrar "Seleccione una cosa" dentro de los límites ComboBox
'usando XAML puro, o XAML puro y algunas líneas de código en la clase de código subyacente de la vista?
Fwiw: Terminé la aplicación de la ThingoWrapper, modificando el ThingoSelectionViewModel para hacer frente a la selección del valor nulo envuelto, y encontrar maneras de seleccionar automáticamente los objetos Whatsy y Fadoozamy así que no tuve que envolverlos también. –