根据WPF中的布尔值将两个不同的属性绑定到一个TextBlock上

本文关键字:绑定 属性 一个 TextBlock WPF 两个 根据 布尔值 | 更新日期: 2023-09-27 18:10:57

我有以下问题:我有UserControl, DataContext被设置为一个对象,具有两个不同的属性(除了其他):Price (decimal)AlternativePrice (string)

UserControl中,我有TextBlock,我想根据评估AlternativePrice == decimal.Zero来设置Text属性。

如果是true,则Text属性应设置为Text={Binding Price},如果是false,则设置为Text={Binding AlternativePrice}

我找到了一些提到Triggers使用的指南,但我无法使其运行。有什么办法能做到这一点吗?

下面是我的部分代码:

<TextBlock Foreground="..." x:Name="priceTextBlock" TextWrapping="Wrap" Text="{Binding ?}"/>

提前感谢您的帮助。

根据WPF中的布尔值将两个不同的属性绑定到一个TextBlock上

使用转换器:

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 != null, values.Count == 2等等)