2014-04-22 104 views
14

我有一个WPF控件具有Message属性。WPF绑定到两个属性

目前,我有这样的:

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

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

显然无法做到这样的,但是这可以帮助解释它是什么,我想:

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

可能的重复:https://stackoverflow.com/q/2552853/1518546 –

回答

23

尽量使用MultiBinding

中记录了绑定对象的集合一个绑定目标属性。

例子:

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; 
    } 
} 
+1

正是我需要的,谢谢! –

+0

这是一个可怕的详细方式来实现这一点。 –

6

你不能这样做在XAML And操作。

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

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

XAML

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

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

+0

你发布的内容不是“按位与”。它只是一个AND运算符。无论如何,我认为他想要的是什么类型,串联起来。 – gleng

+2

是的。但OP没有提及任何问题,因为我们不能'&&'字符串(或所有类型)。所以,只是假设OP想要布尔属性。一旦OP清除图片将会更新。 –

10
<TextBlock.Text> 
    <MultiBinding StringFormat="{}{0} {1}"> 
     <Binding Path="FirstName"/> 
     <Binding Path="LastName"/> 
    </MultiBinding> 
</TextBlock.Text> 
+0

只是最好的! – Ranger