2017-03-04 31 views
3

私たちはTemplate10を使用しているUWPアプリケーションを持っています。割引を示すテキストブロックとテキストボックスがあります。 ViewModel.Discountがnullの場合は、テキストブロックを非表示にします。nullのときにxaml要素を非表示にする

我々はViewModelにはTextBlockの

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

の可視性を設定ビューでは、コンバータ

<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> 

を定義しているApp.xamlで

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

また、VisibilityロジックはViewModelの責任であると述べることもできます。最新のUWPは可視性をブールに直接バインドできます。後で最大価格などの追加のビジネスルールがあるとします。 –

+0

@HenkHoltermanニース、これについて言及してくれてありがとう - 私はどうにかして[これを逃した](https://social.technet.microsoft.com/wiki/contents/articles/34846.uwp-コンパイル - バインド - ウィンドウ - 10-年齢-update.aspx)。 – Romasz

+0

_14393_、 'Visibility =" {x:バインドViewModel.Discount.HasValue、Mode = OneWay} "'。 –

答えて

1

私はTemplate10's sourceで試してみたとおりに動作するはずです。私はちょうどx:Bindの再定義が欠けていると思われます。デフォルトはです。ワンタイムです。

Visibility="{x:Bind ViewModel.Discount, Mode=OneWay, Converter={StaticResource HideWhenNullConverter}}" 
関連する問題