2009-09-21 6 views
0

Je souhaite concevoir la fenêtre de propriétés dans Silverlight à l'aide de DataGrid. Il aura deux colonnes d'en-tête. L'en-tête de valeur peut avoir les différents types de contrôles. Il peut avoir une liste déroulante, une zone de texte et d'autres contrôles. Voici la vue pour la grille de données.Plusieurs types de contrôles dans le même en-tête dans la grille de données dans Silverlight

  1. Nom -------------- Type de contrôle (commande pour afficher)
  2. DisplayText ------- TextBox
  3. type ---- ---------- ComboBox
  4. isEnabled --------- CheckBox

S'il est impossible dans la grille de données alors s'il vous plaît suggérer une autre façon d'obtenir le même.

Répondre

0

Avez-vous regardé DataForm? Je ne sais pas pourquoi vous voudriez faire ce qui précède dans un DataGrid.

+0

J'ai essayé le groupe de données, ce qui est bon pour moi. mais je veux un peu plus d'exigence comme s'il y a une variable de type classe alors je veux montrer un bouton qui ouvrira une fenêtre pop-up pour afficher les propriétés de cette classe. –

0

J'ai utilisé un convertisseur qui a retourné un contrôle. Le convertisseur créé databinding à l'objet source La source de données DataGrid est un IEnumerable<PropertyPresenter>

public class PropertyPresenter 
    { 
     public PropertyInfo PropertyInfo { get; set; } 
     public object Source { get; set; } 
    } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 

     FrameworkElement Control = null; 
     var presenter = value as PropertyPresenter; 

     Binding binding = new Binding(presenter.PropertyInfo.Name); 
     binding.Mode = presenter.PropertyInfo.CanWrite ? BindingMode.TwoWay : BindingMode.OneWay; 
     binding.Source = presenter.Source; 

     if(presenter.PropertyInfo.PropertyType == typeof(bool)) 
     { 
      Control = new CheckBox(); 
      Control.HorizontalAlignment = HorizontalAlignment.Right; 
      Control.SetBinding(CheckBox.IsCheckedProperty, binding); 
     } 
     return Control; 
    } 
Questions connexes