2017-03-04 62 views
3

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

在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}}" 

的可见性在视图模型视图:

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的值为空,textblock始终可见。当ViewModel.Discount为空时,我们如何隐藏文本块

+1

您还可以声明可见性逻辑是ViewModel的责任。最新的UWP可以直接将可见性绑定到布尔。想象一下,你以后有额外的业务规则,如最高价格左右。 –

+0

@HenkHolterman不错,谢谢你提到 - 我已经[想念这个] [https://social.technet.microsoft.com/wiki/contents/articles/34846.uwp-compiled-binding-windows-10-anniversary -update.aspx)。 – Romasz

+0

In _14393_,'Visibility =“{x:Bind ViewModel.Discount.HasValue,Mode = OneWay}”'。 –

回答

1

正如我试过Template10's source它应该工作。我怀疑你只是缺少重新定义模式x:Bind,其默认为一次。像这样尝试:

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