G'day!
Я хочу, чтобы мой WPF ComboBox
отображал какой-то альтернативный текст, когда его выбор с привязкой к данным равен null
.
Модель представления обладает ожидаемыми свойствами:
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
}
// ...
}
Представление имеет XAML-привязку к модели представления ожидаемым образом:
<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>
ComboBoxItem
вклинивается в верхнюю часть - это способ получить дополнительный предмет в верхней части. Это чистый хром: модель представления остается чистой и простой. Есть только одна проблема: пользователи хотят, чтобы «Выберите вещь» отображалось всякий раз, когда выбор ComboBox равен нулю.
Пользователи не хотят, чтобы вещь была выбрана по умолчанию. Они хотят видеть сообщение, говорящее им, чтобы выбрать вещь.
Я бы хотел избежать загрязнения модели представления классом ThingoWrapper
с помощью метода ToString
, возвращающего «Выберите вещь», если его свойство .ActualThingo
имеет значение null, оборачивая каждый Thingo
при заполнении Thingos
и выяснить, каким образом пользователь не может выбрать nulled Thingo
.
Есть ли способ отобразить «Выберите вещь» в границах ComboBox
', используя чистый XAML или чистый XAML и несколько строк кода в классе code-behind представления?