你好!
我希望我的 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
的选择为空时,用户想要显示"选择一个thingo"。
用户不希望默认选择一个thingo。他们希望看到一条消息告诉他们选择一个thingo。
我想避免通过在视图模型中添加ThingoWrapper
类来污染代码,如果其.ActualThingo
属性为空,则返回"Select a thingo"的ToString
方法,包装每个Thingo
以填充Thingos
,并找出防止用户选择空的Thingo
的方法。
是否有一种使用纯XAML或纯XAML和几行代码的方法可以在ComboBox
边界内显示"选择一个thingo"?