C# 基于WPF中的布尔值将两个不同属性绑定到一个TextBlock
我有以下问题:我有C# 基于WPF中的布尔值将两个不同属性绑定到一个TextBlock,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我有以下问题:我有UserControl,其中DataContext被设置为一个具有两个不同属性的对象(其他属性除外):Price(decimal)和AlternativePrice(string) 在UserControl中,我有TextBlock,我想根据评估AlternativePrice==decimal.Zero设置该Text属性 如果true,Text属性应设置为Text={Binding Price},如果false,则Text={Binding AlternativePrice}
UserControl
,其中DataContext
被设置为一个具有两个不同属性的对象(其他属性除外):Price(decimal)
和AlternativePrice(string)
在UserControl
中,我有TextBlock
,我想根据评估AlternativePrice==decimal.Zero
设置该Text
属性
如果true
,Text
属性应设置为Text={Binding Price}
,如果false
,则Text={Binding AlternativePrice}
我发现一些指南提到使用触发器
,但我无法让它运行。
有没有办法做到这一点
以下是我的部分代码:
<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
等等)。我不使用WPF,但我怀疑您的处理代码(.cs code-behind)中需要对照您想要进行数据绑定的字段进行检查(例如:IF(AlternativePrice.equals(decimal.zero)){priceTextBlock.BindingSource={Binding Price}else{priceTextBlock.BindingSource={Binding AlternativePrice}我刚刚意识到我是多么愚蠢,用你写的东西在代码背后是多么容易做到:-P我的错。无论如何,谢谢你的主意。谢谢你的替代方案,我会把这个保存起来以备将来使用。