我遇到以下问题:我UserControl
DataContext
将Price (decimal)
设置为一个具有两个不同属性的对象(旁边的其他属性):AlternativePrice (string)
和UserControl
。
在TextBlock
我Text
根据评估AlternativePrice == decimal.Zero
true
要设置Text
属性。
如果它是Text={Binding Price}
,则false
属性应设置为Text={Binding AlternativePrice}
,如果Triggers
,则设置为<TextBlock Foreground="..." x:Name="priceTextBlock" TextWrapping="Wrap" Text="{Binding ?}"/>
。
我找到了一些提及{{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 != null
,values.Count == 2
等等。)