2010-06-09 9 views
1

Je souhaite afficher certains éléments lorsqu'une propriété n'est pas null. Quel est le meilleur moyen d'y parvenir?Liaison MVVM à la propriété == Null

Voici mon ViewModel:

class ViewModel : ViewModelBase 
{ 
    public Trade Trade 
    { 
     get { return _trade; } 
     set { SetField(ref _trade, value,() => Trade); } 
    } private Trade _trade; 
} 

ViewModelBase hérite INotifyPropertyChanged et contient SetField()

Voici la classe commerciale:

public class Trade : INotifyPropertyChaged 
{ 
    public virtual Company Company 
    { 
     get { return _company; } 
     set { SetField(ref _company, value,() => Company); } 
    } private Company _company; 
    ...... 
} 

Cela fait partie de mon point de vue. xaml

<GroupBox Visibility="{Binding Path=Trade.Company, 
          Converter={StaticResource boolToVisConverter}}" /> 

Je voudrais que cette zone de groupe s'affiche uniquement si Trade.Company n'est pas null (donc lorsqu'un utilisateur sélectionne une société). Aurais-je besoin de créer un convertisseur personnalisé pour vérifier null et retourner la visibilité correcte ou y at-il un dans .NET?

Répondre

3

Plutôt que d'utiliser un BooleanToVisibilityConverter, vous devrez utiliser un convertisseur différent (celui que vous devrez écrire) qui retournera la valeur de visibilité appropriée si la valeur liée est nulle.

Quelque chose comme ceci:

public class NullValueToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
          CultureInfo culture) 
    { 
     return (value != null ? Visibility.Visible : Visibility.Collapsed); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
           CultureInfo culture) 
    { 
     return null; // this shouldn't ever happen, since 
        // you'll need to ensure one-way binding 
    } 
} 

Vous aurez besoin d'ajouter à votre Mode = OneWay obligatoire, puisque vous ne serez pas en mesure de faire une conversion aller-retour.

+0

Merci est venu avec cette idée quand je suis arrivé au bit où je collais le code XAML et réalisé que je pourrait faire un convertisseur personnalisé, merci pour le code grandement apprécié! –

3

Vous pouvez également utiliser DataTriggers pour faire à peu près la même chose sans convertisseur ...

<GroupBox DataContext="{Binding Path=Trade.Company}"> 
    <GroupBox.Style TargetType="GroupBox"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=.}" Value="{x:Null}"> 
       <Setter Property="Visibility" Value="Collapsed"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </GroupBoxStyle> 
</GroupBox> 
Questions connexes