null时隐藏xaml元素

时间:2017-03-04 08:45:43

标签: xaml uwp template10

我们有一个使用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>

在视图中,我们设置了TextBlock的可见性

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

在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的值为null,文本块也始终可见。当ViewModel.Discount为空

时,我们如何隐藏文本块?

1 个答案:

答案 0 :(得分:1)

正如我尝试使用Template10's source一样,它应该可行。我怀疑你只是缺少{em>模式与x:Bind的重新定义,默认情况下是 OneTime 。试试这样:

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