Can a WPF ComboBox display alternative text when its selection is null?
        Posted  
        
            by Garth T Kidd
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Garth T Kidd
        
        
        
        Published on 2010-05-25T02:04:21Z
        Indexed on 
            2010/05/25
            2:11 UTC
        
        
        Read the original article
        Hit count: 501
        
G'day!
I want my WPF ComboBox to display some alternative text when its data-bound selection is null.
The view model has the expected properties:
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
    }
    // ...
}
The view has XAML binding to the view model in the expected way:
<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>
The ComboBoxItem wedged into the top is a way to get an extra item at the top. It's pure chrome: the view model stays pure and simple. There's just one problem: the users want "Select a thingo" displayed whenever the ComboBox' selection is null. 
The users do not want a thingo selected by default. They want to see a message telling them to select a thingo.
I'd like to avoid having to pollute the viewmodel with  a ThingoWrapper class with a ToString method returning "Select a thingo" if its .ActualThingo property is null, wrapping each Thingo as I populate Thingos, and figuring out some way to prevent the user from selecting the nulled Thingo.
Is there a way to display "Select a thingo" within the ComboBox' boundaries using pure XAML, or pure XAML and a few lines of code in the view's code-behind class? 
© Stack Overflow or respective owner