2012-07-26 3 views
0

J'ai une collection qui est observable binded à DataGrid. Je peux créer des contrôles WPF tels que l'étiquette, etc dans les cellules textbox DataGrid dynamiquement qui met à jour à son tour collection observable.Comment afficher les éléments de collection observables sur toile WPF

Maintenant, je voudrais montrer cette collection d'articles sur toile en lignes et en colonnes comme dans DataGrid. S'il vous plaît aidez-moi à obtenir cela. J'utilise le code comme ci-dessous. Mais il lève l'exception (en ajoutant le contrôle à la toile) comme ci-dessous. Visual Specifié est déjà un enfant d'un autre Visual ou la racine d'un CompositionTarget.

Merci pour votre réponse.

où les données sont une classe définie comme ci-dessous.

données public class: INotifyPropertyChanged {

private UIElement _uIElement; 
    public UIElement UIElement 
    { 
     get { return _uIElement; } 
     set 
     { 
      if (value != _uIElement) 
      { 
       _uIElement = value; 
       this.OnPropertyChanged("UIElement"); 
      } 
     } 
    } 

    private UIElement _inputField; 
    public UIElement InputField 
    { 
     get { return _inputField; } 
     set 
     { 
      if (value != _inputField) 
      { 
       _inputField = value; 
       this.OnPropertyChanged("InputField"); 
      } 
     } 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string name) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 

}}

propriétés InputField et UIElement sont les 2 colonnes de DataGrid qui détient la dynamique créée informations sur le contrôle.

Répondre

3

Un Visual ne peut avoir l'un des parents pour que vous auriez à le retirer de la ObservableCollection (qui vraisemblablement votre DataGrid est lié à) d'abord .... mais vous auriez alors sur votre Canvas mais pas sur votre DataGrid. Donc si vous essayez d'avoir 2 "vues" de votre collection de UIElement s en même temps, alors vous devriez cloner les éléments pour qu'ils puissent entrer dans le Canvas.

Qu'est-ce que le type "Données" ... pouvez-vous élaborer là-dessus?

La méthode préférée consiste à conserver vos modèles Model/View dans la collection (pas UIElement s), puis à définir DataTemplate qui définissent les visuels pour ces types de données. Ensuite, vous pouvez avoir le DataGrid et le Canvas tous les deux se lier à la même collection de données, mais ils auront chacun leurs propres visuels gonflés lorsque les DataTemplates sont appliqués.

Voir ces liens:

Questions connexes