xaml中的条件元素取决于绑定内容

时间:2010-12-15 14:20:01

标签: c# wpf xaml binding

只有在Address.Length > 0时才能显示此TextBlock吗?我想直接在xaml中执行此操作,我知道我可以以编程方式放置所有控件

 <TextBlock Text="{Binding Path=Address}" />

3 个答案:

答案 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