【发布时间】:2011-05-25 22:50:24
【问题描述】:
是否可以显示此 TextBlock,仅当 Address.Length > 0 时?我想直接在 xaml 中执行此操作,我知道我可以以编程方式放置所有控件
<TextBlock Text="{Binding Path=Address}" />
【问题讨论】:
是否可以显示此 TextBlock,仅当 Address.Length > 0 时?我想直接在 xaml 中执行此操作,我知道我可以以编程方式放置所有控件
<TextBlock Text="{Binding Path=Address}" />
【问题讨论】:
基本上,您需要编写一个IValueConverter,以便可以将TextBox 的Visibility 属性绑定到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}}"
/>
您还应该记住在Address 的设置器中通知HasAddress 的属性更改。
【讨论】:
您可以创建一个StringToVisibility 转换器。
如果绑定字符串is not null or empty,它将返回Visibility.Visible,如果是,则返回Visibility.Collapsed。
在将Address 与TextBlock 的Visibility 属性绑定时使用此转换器。
<TextBlock Text="{Binding Path=Address}" Visibility="{Binding Address, Converter={StaticResource StringToVisibilityConverter}}" />
【讨论】: