WPF - Combobox with a null item
---
---
WPF - Combobox with a null item
It adds an item for “Select All” or “Empty” functionality into a combobox
- Converter
public class ComboBoxEmptyItemConverter : IValueConverter
{
/// <summary>
/// this object is the empty item in the combobox. A dynamic object that
/// returns null for all property request.
/// </summary>
private class EmptyItem : DynamicObject
{
public string Name { get; set; } = "Empty";
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
// just set the result to null and return true
result = null;
return true;
}
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// assume that the value at least inherits from IEnumerable
// otherwise we cannot use it.
IEnumerable container = value as IEnumerable;
if (container != null)
{
// everything inherits from object, so we can safely create a generic IEnumerable
IEnumerable<object> genericContainer = container.OfType<object>();
// create an array with a single EmptyItem object that serves to show en empty line
IEnumerable<object> emptyItem = new object[] { new EmptyItem() };
// use Linq to concatenate the two enumerable
return emptyItem.Concat(genericContainer);
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is EmptyItem ? null : value;
}
}
-
XAML
<StackPanel> <ComboBox ItemsSource="{Binding Items, Converter={StaticResource ComboBoxEmptyItemConverter}}" SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ComboBoxEmptyItemConverter}}" DisplayMemberPath="Name" /> <TextBlock Text="{Binding SelectedItem.Name}"/> </StackPanel>
Comments
Post a Comment