null时隐藏xaml元素

null时隐藏xaml元素,xaml,uwp,template10,Xaml,Uwp,Template10,我们有一个使用Template10的UWP应用程序。有一个显示折扣的文本块和文本框。当ViewModel.Discount为空时,我们希望隐藏文本块 在App.xaml中,我们定义了一个转换器 <T10Converters:ValueWhenConverter x:Key="HideWhenNullConverter" When="{x:Null}"> <T10Converters:ValueWhenConverter.Value> <Vis

我们有一个使用Template10的UWP应用程序。有一个显示折扣的文本块和文本框。当
ViewModel.Discount
为空时,我们希望隐藏文本块

在App.xaml中,我们定义了一个转换器

<T10Converters:ValueWhenConverter x:Key="HideWhenNullConverter" When="{x:Null}">
    <T10Converters:ValueWhenConverter.Value>
        <Visibility>Collapsed</Visibility>
    </T10Converters:ValueWhenConverter.Value>
    <T10Converters:ValueWhenConverter.Otherwise>
        <Visibility>Visible</Visibility>
    </T10Converters:ValueWhenConverter.Otherwise>
</T10Converters:ValueWhenConverter>
在ViewModel中:

public class ViewModel : ViewModelBase
{
    decimal? _Discount = default(decimal?);
    public decimal? Discount
    {
        get
        {
            return _Discount;
        }
        set
        {
            if (value == 0) value = null;
            Set(ref _Discount, value);
        }
    }
但是,即使
ViewModel.Discount
的值为空,文本块始终可见。当
ViewModel.Discount
为空时,我们如何隐藏文本块,因为我已经尝试过使用它了。我怀疑您只是缺少使用
x:Bind
重新定义模式,默认情况下是一次性的。试着这样做:

Visibility="{x:Bind ViewModel.Discount, Mode=OneWay, Converter={StaticResource HideWhenNullConverter}}"

您还可以声明可见性逻辑是ViewModel的责任。最新的UWP可以将可见性直接绑定到bool。想象一下,你以后会有额外的业务规则,比如最高价格等等。@HenkHolterman Nice,谢谢你提到这一点-我不知怎么说。在14393中,
Visibility=“{x:Bind ViewModel.Discount.HasValue,Mode=OneWay}”
。实际上,如果你使用14393,你应该避免转换器,因为它们速度很慢。相反,你可以直接绑定一个函数。是的@Justin XL这就是我们发现的。。。转换器非常慢。谢谢你的提示!
Visibility="{x:Bind ViewModel.Discount, Mode=OneWay, Converter={StaticResource HideWhenNullConverter}}"