Можно ли отобразить этот TextBlock, только если Address.Length > 0? Я хотел бы сделать это прямо в xaml, я знаю, что я мог бы программно программировать все мои элементы управления
<TextBlock Text="{Binding Path=Address}" />
Можно ли отобразить этот TextBlock, только если Address.Length > 0? Я хотел бы сделать это прямо в xaml, я знаю, что я мог бы программно программировать все мои элементы управления
<TextBlock Text="{Binding Path=Address}" />
В принципе, вам нужно будет написать IValueConverter, чтобы вы могли привязать свойство Visibility вашего TextBox либо в поле Address, либо в новом поле, которое вы создаете.
Если вы привязываетесь к полю Address, вот как привязка может выглядеть так:
<TextBlock Text="{Binding Path=Address}"
Visibility="{Binding Path=Address, Converter={StaticResource StringLengthVisibilityConverter}" />
И тогда StringLengthVisiblityConverter может выглядеть примерно так:
public class StringLengthVisiblityConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || value.ToString().Length == 0)
{
return Visibility.Collapsed;
}
else
{
return Visibility.Visible;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// Don't need to implement this
}
}
Тогда вам просто нужно добавить свой конвертер в качестве ресурса, используя такой синтаксис (где src отображается в пространство имен, где установлен преобразователь):
<src:StringLengthVisiblityConverter x:Key="StringLengthVisiblityConverter" />
Я бы сделал это с другим булевым свойством, называемым HasAddress, которое возвращает Address.Length > 0.
<!-- In some resources section -->
<BooleanToVisibilityConverter x:Key="Bool2VisibilityConverter" />
<TextBlock
Text="{Binding Address}"
Visibility="{Binding HasAddress, Converter={StaticResource Bool2VisibilityConverter}}"
/>
Вы также должны помнить об изменении свойства для HasAddress в установщике Address.
Вы можете создать конвертер StringToVisibility.
Он вернет Visibility.Visible, если привязана строка is not null or empty и Visibility.Collapsed, если она есть.
Используйте этот конвертер, привязывая Address к свойству Visibility вашего TextBlock.
<TextBlock Text="{Binding Path=Address}" Visibility="{Binding Address, Converter={StaticResource StringToVisibilityConverter}}" />