【问题标题】:Conditional element in xaml depending on the binding contentxaml 中的条件元素取决于绑定内容
【发布时间】:2011-05-25 22:50:24
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案1】:

    基本上,您需要编写一个IValueConverter,以便可以将TextBoxVisibility 属性绑定到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" />
    

    【讨论】:

    • XAML 缺少一个大括号,如果我没看错的话,不是吗?
    • @Tobias 我认为你是对的,尽管在完全公开的情况下,我多年来没有对 XAML 做过任何事情,所以我有点生疏了。但是,我已经更新了答案-感谢您指出。
    【解决方案2】:

    我将使用另一个名为 HasAddress 的布尔属性来执行此操作,该属性返回 Address.Length &gt; 0

    <!-- In some resources section -->
    <BooleanToVisibilityConverter x:Key="Bool2VisibilityConverter" />
    
    <TextBlock 
      Text="{Binding Address}" 
      Visibility="{Binding HasAddress, Converter={StaticResource Bool2VisibilityConverter}}" 
    />
    

    您还应该记住在Address 的设置器中通知HasAddress 的属性更改。

    【讨论】:

      【解决方案3】:

      您可以创建一个StringToVisibility 转换器。

      如果绑定字符串is not null or empty,它将返回Visibility.Visible,如果是,则返回Visibility.Collapsed

      在将AddressTextBlockVisibility 属性绑定时使用此转换器。

      示例:

      <TextBlock Text="{Binding Path=Address}" Visibility="{Binding Address, Converter={StaticResource StringToVisibilityConverter}}" />
      

      【讨论】:

        猜你喜欢
        • 2018-08-06
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 2013-12-11
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多