根据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 ?}"/>
提前感谢您的帮助。
使用转换器:
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
等等)