2009-06-30 7 views
1

Est-il possible de lier à une propriété d'une propriété? Voici ce que j'ai:La liaison de données hiérarchique avec des propriétés est-elle possible?

[Bindable(true)] 
    public class DataClass 
    { 
     private string DescriptionValue = null; 
     private Content DataContent Value = new Content(); 
     .... 

     [Bindable(true)] 
     public Content DataContent 
     { 
      get { return DataContent; } 
      set { DataContent = value; } 
     } 

     [Bindable(true)] 
     public string Description 
     { 
      get { return DescriptionValue; } 
      set { DescriptionValue = value; } 
     } 
     ... 
    } 


    [Bindable(true)] 
    public class Content 
    { 
     private object ContentValue = null; 
     private Color StateBackColorValue; 
     ... 

     [Bindable(true)] 
     public object Content 
     { 
      get { return ContentValue; } 
      set { ContentValue = value; } 
     } 

     [Bindable(true)] 
     public Color StateBackColor 
     { 
      get { return StateBackColorValue; } 
      set { StateBackColorValue = value; } 
     } 
     ... 
    } 

Est-il en quelque sorte possible de lier un contrôle à DataContent.Content ou toute autre propriété de la classe de contenu? Je sais que je pourrais introduire des propriétés dans la classe DataContent qui mappent les propriétés de la classe Content. Je voulais juste savoir si la liaison hiérarchique avec les propriétés est possible.

Répondre

1

Quel type de liaison de données faites-vous?

Avec une simple liaison (TextBox.Text à un seul objet, par exemple), oui, vous pouvez utiliser "Foo.Bar.SomeProp" comme membre. Pour PropertyGrid, vous pouvez marquer les objets avec [TypeConverter(typeof(ExpandableObjectConverter))] et cela fonctionnera.

Le plus compliqué est la liaison de liste (DataGridView etc.); ici, non: il ne s'aplatit pas facilement. Vous pouvez le faire si vous allez à grandes longueurs (ITypedList etc), mais il est vraiment pas la peine - il suffit d'ajouter des propriétés Caler parent:

public string ChildName { 
    get {return child == null ? "" : child.Name;} // and setter if you want 
} 
Questions connexes