2009-08-19 16 views
1

ここでは、私が持っているものです。WPFコンボボックスのデータバインディング

  • のみidと名前の列で、このCategoryテーブルを保持しているSQL CEデータベース、。
  • sqlmetalで生成されたdbml
  • linqを公開するシングルトン(静的クラス)DataContext。コードビハインドファイルに
  • 、私のような性質を持って、次のとおりです。

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

を私は単にComboBoxにカテゴリをバインドしたいです。 コードの後ろにItemsSourceを設定したくない場合は、このXAMLのみを実行したいのですが、どうすればよいですか? ほとんどの例が見つかりましたXAMLで右がデータを定義する、またはプログラム的ItemsSourceを設定し、それは私が欲しいものではありませんた。サイドノートとして

なぜこの、例えば、動作しない?

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

、私は私はwpfのデータバインディングモデルが非常に厚く、物事を行うために多くの方法があるので、非常に難しいと感じています。

その後編集:それはXAMLで動作しない理由を

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

     cmbCategory.ItemsSource = cats; 

それでも、私はそれを把握することはできません。 は、私は私がこのようなItemsSourceを設定した場合、それが動作することがわかりました。

答えて

2

あなたはLibraryDataStore.Instanceに、ユーザーコントロールのDataContextのを設定する必要があります。このdatacontextは、コンボボックスのビジュアルツリーをフィルタリングします(コンボボックス自体のdatacontextを設定する必要はありません)。あなたのxamlは、このオブジェクト "パブリック"のパブリックプロパティにバインドすることができます。

ビーStollnitzは(すなわち、それは静かに失敗)彼女のブログ上でデータバインディングの問題を検出する方法の良い概要を示します。 - >http://bea.stollnitz.com/blog/?p=52

+0

それは動作します:)ありがとう まだ私は "これ"にDataContextを設定し、またLIbraryDataStore.Instance.Categoriesでラップされたプロパティを公開するときにそれが異なっているのか分かりません。しかし、それは今は重要ではありません。なぜなら、そのアプローチはとにかく馬鹿げたものだったからです。 – Teodor

+0

ところで、それはBea Stollnitzの素晴らしいブログ投稿です。 – Teodor

0

あなたは現在のインスタンスにごUserControl(またはPage)のDataContextを設定する必要があります。

this.DataContext = this; 
+0

もコンボののDataContextを設定しようとした、ことを試みたが、まだそれはdoesnの仕事。プロジェクトはコンパイル&実行されますが、コンボは空です。 – Teodor

関連する問題