Ok, so here is my XAML:
<TextBlock Text="{Binding Path=InstanceName}"></TextBlock>
If InstanceName
is null or an empty string, I want Visibility="Collapsed"
. Otherwise I want Visibility="Visible"
. How would I do that?
You could use a ValueConverter:
<TextBlock
Visibility="{Binding InstanceName, Converter={local:StringNullOrEmptyToVisibilityConverter}}"
Text="{Binding InstanceName}"/>
with the following codebehind:
public class StringNullOrEmptyToVisibilityConverter : System.Windows.Markup.MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.IsNullOrEmpty(value as string)
? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
If you are inside a (Data-)Template you can use Triggers for that.
Otherwise, the MVVM-Pattern or a ValueConverter will help you.
By putting an extra property in your viewmodel that you can bind the Visibility attribute to:
public class ViewModel
{
public string InstanceName {...}
public Visibility InstanceVisibility
{
get
{
return String.IsNullOrEmpty(InstanceName) ? Visibility.Collapsed : Visibility.Visible;
}
}
<TextBlock Text="{Binding Path=InstanceName},FallbackValue={x:Null}"></TextBlock>
Then add a DataTrigger to check the value is null and change visibility using Setter. This is the simple method which iam using.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With