【问题标题】:WPF binding to two propertiesWPF 绑定到两个属性
【发布时间】:2014-06-07 04:35:38
【问题描述】:

我有一个具有 Message 属性的 WPF 控件。

我目前有这个:

 <dxlc:LayoutItem >
            <local:Indicator Message="{Binding PropertyOne}" />
 </dxlc:LayoutItem>

但我需要将 Message 属性绑定到两个属性。

显然不能这样做,但这可以帮助解释我想要什么:

<dxlc:LayoutItem >
            <local:Indicator Message="{Binding PropertyOne && Binding PropertyTwo}" />
 </dxlc:LayoutItem>

【问题讨论】:

标签: wpf binding


【解决方案1】:
<TextBlock.Text>
    <MultiBinding StringFormat="{}{0} {1}">
        <Binding Path="FirstName"/>
        <Binding Path="LastName"/>
    </MultiBinding>
</TextBlock.Text>

【讨论】:

  • 简直是最好的!!
  • 如何格式化一些字符串绑定?我有字段TimeSpan 然后&lt;Binding Path="TotalTime" StringFormat="hh\\:mm\\:ss\\.fff"/&gt; 但它不起作用
【解决方案2】:

尝试使用MultiBinding:

描述附加到单个绑定目标属性的 Binding 对象的集合。

例子:

XAML

<TextBlock>
   <TextBlock.Text>
       <MultiBinding Converter="{StaticResource myNameConverter}"
                     ConverterParameter="FormatLastFirst">
          <Binding Path="FirstName"/>
          <Binding Path="LastName"/>
       </MultiBinding>
   </TextBlock.Text>
</TextBlock>

Converter

public class NameConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        string name;

        switch ((string)parameter)
        {
            case "FormatLastFirst":
                name = values[1] + ", " + values[0];
                break;
            case "FormatNormal":
                default:
                name = values[0] + " " + values[1];
                break;
        }

        return name;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        string[] splitValues = ((string)value).Split(' ');
        return splitValues;
    }
}

【讨论】:

  • 这是一种非常冗长的实现方式。
【解决方案3】:

您不能在 XAML 中执行 And 操作。

在您的视图模型类中创建包装器属性,该属性将返回两个属性中的一个并与该属性绑定。

public bool UnionWrapperProperty
{
   get
   {
      return PropertyOne && PropertyTwo;
   }
}

XAML

<local:Indicator Message="{Binding UnionWrapperProperty}" />

另一种方法是使用 MultiValueConverter。将两个属性传递给它,然后从转换器返回 And 值。

【讨论】:

  • 您发布的不是Bitwise AND。它只是一个AND 运算符。无论如何,我认为他想要任何类型的连接。
  • 是的。但是 OP 没有提到任何问题,因为我们不能 &amp;&amp; 字符串(或所有类型)。所以,只是假设 OP 想要 bool 属性。 OP清屏后会更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多