2009-08-19 3 views
1

Hier ist, was ich habe:WPF Combobox Datenbindung zu einer L2S Tabelle

  • eine SQL CE-Datenbank, die in diese Category Tabelle, mit der ID und dem Namen Spalten nur.
  • dbml generiert mit sqlmetal
  • Singleton (statische Klasse), die die linq DataContext exponiert.
  • in der Code-Behind-Datei, habe ich eine Eigenschaft wie folgt:

    private System.Data.Linq.Table<Categories> Categories 
    { 
        get 
        { 
         return LibraryDataStore.Instance.Categories; 
        } 
    } 
    

möchte ich eine ComboBox die Kategorien einfach zu binden. Ich kann nicht glauben, dass ich schon seit Stunden damit beschäftigt bin, ohne Ergebnis :( Ich möchte ItemsSource nicht im Code hinter setzen, ich möchte das nur XAML tun, aber wie? Die meisten Beispiele, die ich gefunden habe in XAML wurden genau dort die Daten zu definieren, oder ItemsSource programmatisch einstellen, aber das ist nicht das, was ich will.

Warum dies nicht, zum Beispiel?

  <ComboBox Name="cmbCategory" 
         Margin="3" 
         MinWidth="200" 
         ItemsSource="{Binding Path=Categories}" 
         DisplayMemberPath="Name"/> 

Als Randbemerkung arbeiten, i Ich möchte sagen, dass ich finde, dass das Datenbindungsmodell von wpf extrem schwierig zu lernen ist, da es so dick ist und es so viele Möglichkeiten gibt, Dinge zu tun.

Später bearbeiten: fand ich, dass es funktioniert, wenn ich die ItemsSource wie folgt festgelegt:

 var cats = from c in LibraryDataStore.Instance.Categories 
        select c; 

     cmbCategory.ItemsSource = cats; 

noch, ich kann es nicht herausfinden, warum es nicht in XAML funktioniert.

Antwort

2

Sie müssen die Datacontext der Usercontrol auf LibraryDataStore.Instance gesetzt. Dieser Datenkontext filtert dann den visuellen Baum zu Ihrer Combobox (so dass es nicht notwendig ist, den Datenkontext der Combobox selbst festzulegen). Ihr XAML wird dann in der Lage sein, an die öffentliche Eigenschaft dieses Objekts "Categories" zu binden.

Bea Stöllnitz gibt einen guten Überblick darüber, wie Probleme mit Datenbindung zu erkennen, auf ihrem Blog (dh es still versagt) ->http://bea.stollnitz.com/blog/?p=52

+0

es funktioniert :) danke Noch verstehe ich nicht, warum ist es anders, wenn ich den DataContext auf "this" setzen, und auch eine Eigenschaft, die über LIbraryDataStore.Instance.Categories gewickelt ist. Aber das ist jetzt egal, denn diese Herangehensweise war irgendwie albern. – Teodor

+0

Übrigens, das ist ein toller Blogbeitrag von Bea Stollnitz. – Teodor

0

müssen Sie die DataContext Ihrer UserControl (oder Page) auf die aktuelle Instanz setzen:

this.DataContext = this; 
+0

versucht, dass auch die Datacontext der Combo zu setzen versucht, aber es doesn noch‘ t arbeiten. Projekt kompiliert und läuft, aber die Combo ist leer. – Teodor