WPF: привязка видимости по содержимому строки
Итак, вот мой XAML:
<TextBlock Text="{Binding Path=InstanceName}"></TextBlock>
Если InstanceName
является пустой или пустой строкой, я хочу Visibility="Collapsed"
. В противном случае я хочу Visibility="Visible"
. Как мне это сделать?
Ответы
Ответ 1
Вы можете использовать ValueConverter:
<TextBlock
Visibility="{Binding InstanceName, Converter={local:StringNullOrEmptyToVisibilityConverter}}"
Text="{Binding InstanceName}"/>
со следующим кодом:
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;
}
}
Ответ 2
Если вы находитесь внутри шаблона (Data-), для этого можно использовать Триггеры.
В противном случае вам поможет MVVM-шаблон или ValueConverter.
Ответ 3
Поместив дополнительное свойство в вашей модели просмотра, вы можете привязать атрибут видимости к:
public class ViewModel
{
public string InstanceName {...}
public string Visibility InstanceVisibility
{
get
{
return String.IsNullOrEmpty(InstanceName) ? Visibility.Collapsed : Visibility.Visible;
}
}
Ответ 4
<TextBlock Text="{Binding Path=InstanceName},FallbackValue={x:Null}"></TextBlock>
Затем добавьте DataTrigger для проверки значения null и изменения видимости с помощью Setter.
Это простой метод, который использует i.
Ответ 5
Хорошо, так что это близко к PyBinding:
<TextBlock Text="{Binding Path=InstanceName}" Visibility="{p:PyBinding BooleanToVisibility(IsNotNull($[.InstanceName]))}" ></TextBlock>
Мне нужно заменить IsNotNull на что-то, что означает IsNotNullOrEmpty, но я становлюсь ближе.