基于WPF中的布尔值将两个不同的属性绑定到一个TextBlock

时间:2014-07-01 19:00:06

标签: c# wpf xaml binding

我遇到以下问题:我UserControl DataContextPrice (decimal)设置为一个具有两个不同属性的对象(旁边的其他属性):AlternativePrice (string)UserControl

TextBlockText根据评估AlternativePrice == decimal.Zero true要设置Text属性。

如果它是Text={Binding Price},则false属性应设置为Text={Binding AlternativePrice},如果Triggers,则设置为<TextBlock Foreground="..." x:Name="priceTextBlock" TextWrapping="Wrap" Text="{Binding ?}"/>

我找到了一些提及{{1}}使用的指南,但我无法让它运行。 有办法怎么做这样的事情?

以下是我的代码的一部分:

{{1}}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用转换器:

class MyConverter : IMultiValueConverter
{
  public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
  {
    decimal v1 = (decimal)values[0];
    decimal v2 = (decimal)values[1];

    decimal res = v1 != 0 ? v1 : v2;
    return res.ToString();
  }

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

XAML中的用法

<UserControl.Resources>
  <converter:MyConverter x:Key="Conv" />
</UserControl.Resources>

<TextBlock>
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource Conv}">
      <Binding Path="AlternativePrice" />
      <Binding Path="Price" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

当然,您应该在Convert方法中添加一些检查(values != nullvalues.Count == 2等等。)