bij*_*iju 3 data-binding wpf binding string-formatting
我希望将一个timepan属性绑定到一个文本块,这似乎是在这篇文章的帮助下解决的
现在我想在数据为null时隐藏StringFormat.如果我使用带有stringformat的mutibinding并且如果我的数据为null,那么stringformat只显示一个":"
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}:{1}">
<Binding Path="MyTime.Hours" TargetNullValue={x:Null}/>
<Binding Path="MyTime.Minutes" TargetNullValue={x:Null}/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
如果数据为空,我怎么能隐藏":"
我基本上在这里回答与Nicolas Repiquet相同的事情,但无论如何......
感觉框架中缺少一部分.(据我所知)没有办法让MultiBinding在没有Converter的情况下使用FallbackValue.使用这种方法可能会让你回到正方形1,因为你的上一个问题是关于更好的方法然后使用转换器:)
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}:{1}"
Converter="{StaticResource FallbackConverter}"
FallbackValue="">
<Binding Path="MyTime.Hours" />
<Binding Path="MyTime.Minutes" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
转换器基本上做你应该能够使用属性的东西
public class FallbackConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
foreach (object value in values)
{
if (value == DependencyProperty.UnsetValue)
{
return DependencyProperty.UnsetValue;
}
}
return values;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)