2017-03-04 1 views
3

Nous avons une application UWP utilisant Template10. Il y a un bloc de texte et une zone de texte qui montrent un rabais. Nous souhaitons masquer le bloc de texte lorsque ViewModel.Discount est null.Masquer l'élément xaml lorsque null

En App.xaml nous avons défini un convertisseur

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

Dans la vue nous avons mis la visibilité du TextBlock

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

Dans le 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); 
     } 
    } 

Cependant, la textblock est toujours visible même si la valeur ViewModel.Discount est null. Comment cacher le bloc de texte quand ViewModel.Discount est nul

+1

Vous pouvez également indiquer que la logique de visibilité est sous la responsabilité de ViewModel. Le dernier UWP peut lier directement la visibilité à un booléen. Imaginez que vous ayez plus tard des règles commerciales supplémentaires, comme un prix maximum. –

+0

@HenkHolterman Nice, merci de mentionner que - j'ai en quelque sorte [manqué ceci] (https://social.technet.microsoft.com/wiki/contents/articles/34846.uwp-compiled-binding-windows-10-anniversary -update.aspx). – Romasz

+0

Dans _14393_, 'Visibility =" {x: Lier ViewModel.Discount.HasValue, Mode = OneWay} "'. –

Répondre

1

Comme j'ai essayé avec Template10's source cela devrait fonctionner. Je soupçonne qu'il vous manque juste la redéfinition de Mode avec x:Bind, qui par défaut est OneTime. Essayez comme ceci:

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