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?
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.
Ok, so this is close with PyBinding:
<TextBlock Text="{Binding Path=InstanceName}" Visibility="{p:PyBinding BooleanToVisibility(IsNotNull($[.InstanceName]))}" ></TextBlock>
I need to replace IsNotNull with something that means IsNotNullOrEmpty, but I'm getting closer.