WPF Binding - Default value for empty string
Is there a standard way to set a default or fallback value for a WPF binding if the bound string is empty?
<TextBlock Text="{Binding Name, FallbackValue='Unnamed'" />
The FallbackValue
only seems to kick in when Name
is null, but not when it is set to String.Empty
.
DataTrigger
is the way i do it like this:
<TextBox>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource ReadOnlyTextBox}">
<Setter Property="Text" Value="{Binding Name}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Name.Length, FallbackValue=0, TargetNullValue=0}" Value="0">
<Setter Property="Text" Value="{x:Static local:ApplicationLabels.NoValueMessage}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
I was under the impression that FallbackValue provides a value when the binding fails and TargetNullValue provides a value when the bound value is null.
To do what you want you will either need a converter (possibly with a parameter) to convert an empty string to a target value, or put the logic in your view model.
I would probably go with a converter something like this (not tested).
public class EmptyStringConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
return string.IsNullOrEmpty(value as string) ? parameter : value;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}