当绑定返回null时,隐藏多重绑定的字符串格式。

3
我想将一个时间段属性绑定到一个文本块上,通过这篇文章的帮助似乎已经解决了这个问题。
现在,当数据为空时,我想隐藏StringFormat。从帖子中得知,如果我使用一个带有StringFormat的多绑定,并且我的数据为空,那么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>

如果数据为空,我该如何隐藏“:”?
2个回答

5

我基本上和Nicolas Repiquet在这里回答了相同的问题,但是无论如何...
感觉框架这里缺少了一部分。据我所知,没有办法使MultiBinding使用FallbackValue而不使用Converter。如果使用这种方法,您可能会退回到1平方,因为您最后一个问题是有一个更好的方法,而不是使用Converter :)

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}:{1}"
                      Converter="{StaticResource FallbackConverter}"
                      FallbackValue="">
            <Binding Path="MyTime.Hours" />
            <Binding Path="MyTime.Minutes" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

转换器基本上所做的就是你应该能够使用属性来完成的功能。

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();
    }
}

看起来使用转换器并不是一个坏主意 ;) - biju

2

可以在这里查看多绑定的回退值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接