2017-03-04 63 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}}"