Можно ли отобразить этот 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}}" />