只有在Address.Length > 0
时才能显示此TextBlock吗?我想直接在xaml中执行此操作,我知道我可以以编程方式放置所有控件
<TextBlock Text="{Binding Path=Address}" />
答案 0 :(得分:22)
基本上,您需要编写IValueConverter
,以便将Visibility
的{{1}}属性绑定到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
答案 1 :(得分:7)
我会使用另一个名为HasAddress
的布尔属性执行此操作,该属性返回Address.Length > 0
。
<!-- In some resources section -->
<BooleanToVisibilityConverter x:Key="Bool2VisibilityConverter" />
<TextBlock
Text="{Binding Address}"
Visibility="{Binding HasAddress, Converter={StaticResource Bool2VisibilityConverter}}"
/>
您还应该记得在HasAddress
的设置器中通知Address
的属性更改。
答案 2 :(得分:3)
您可以创建StringToVisibility
转换器。
如果绑定字符串Visibility.Visible
,则返回is not null or empty
,如果是,则返回Visibility.Collapsed
。
在Address
绑定Visibility
的{{1}}属性时使用此转换器。
TextBlock