2009-10-05 7 views
2

Je possède un DataGrid Silverlight qui contient un RowDetailsTemplate. RowDetailsTemplate contient un TabControl avec plusieurs TabItems. Le DataGrid sera lié avec des éléments de type Contact. Contact a une propriété appelée ContactType. J'aimerais que plusieurs TabItems soient cachés lorsque ContactType est Client. Idéalement, je voudrais le faire par DataBinding mais je n'ai pas encore trouvé de le faire.Modification de la visibilité des contrôles enfants dans RowDetailsTemplate en fonction de la propriété DataContext

Répondre

1

Liez le TabItem.Visibility dans le RowDetailTemplate au ContactType en utilisant un convertisseur de valeur qui convertit ContactType à Visibilité. Vous devez ajouter ContactTypeConverter à l'application ou à la page en tant que ressource.

<TabItem 
    Visibility="{Binding ContactType, Converter={StaticResource ContactTypeConverter}}"/> 

namespace Demo 
{ 
using System; 
using System.Windows; 
using System.Windows.Data; 

public enum ContactType 
{ 
    Client 
}; 

/// <summary> 
/// A Value converter 
/// </summary> 
public class ContactTypeConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var contactType = (ContactType) value; 

     switch (contactType) 
     { 
      case ContactType.Client: 
       return Visibility.Visible; 

      default: 
       return Visibility.Collapsed; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return DependencyProperty.UnsetValue; 
    } 

    #endregion 
} 
} 
Questions connexes