2009-09-01 10 views
1

リストボックスをリストにバインドするにはどのようにして、私は含むウィンドウのクラスファイルにありますか?私は見て、私は設定することができますが、これは私が欲しいものであるかどうかわからないItemsSourceプロパティがありますも私はそれを設定するには確信しています。データWPFリストボックスをバインドしますか?

答えて

3

私はそれを考え出し:このcheatsheetによると、私は次のように使用するために必要な:

パスはあなたが反対バインドしたい文字列のリストが含まれているプロパティの名前に設定されている
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=Categories}" 

。ここで

3

かなりそれだ:次に

<ListBox ItemsSource="{Binding}"> 
</ListBox> 

文字列のコレクションのいくつかの並べ替えにあなたのDataContextを設定し、それはそれです。 DataContextに直接バインドしたくない場合は、それを行うことができますが、これを独自のコントロールに入れて、機能性をより明確にすることができます。

+0

私は本当にここに迷ってしまいましたが... DataContextの?それはどこですか?そのようなnoobのために申し訳ありません... – RCIX

+0

DataContextは、コントロールのプロパティです –

+0

これはxamlファイルではなくcsファイルにあります。これは基本クラスのメンバーです:System.Windows.FrameworkElement。 WPFデータバインディングに関するいくつかの検索を行うだけで、たくさんのヘルプとサンプルが見つかります。 –

3

非常に広い質問です。最善の策はMSDNのintroductory topicです。

+0

合意。これはWPFのデータバインディングの基本であるため、OPは一般的にそれについて読む必要があります。 – Noldorin

+0

私は既に別の解決策を持っていますが、(リストボックスのitemsプロパティに必要なすべてのアイテムを手動で追加する)ハッキーですが、これは有用ではありません。この場合、私は魚が好きで、教えはしたくないです... – RCIX

0

はこれを行うにはいくつかのより多くの方法があります。

一つはリストにウィンドウクラスの静的プロパティを作成し、このようにそれにバインドすることです:

{Binding Source={x:Static local:MyWindow.MyList}} 

あなたは、一般的にだけだろうもちろん、ウィンドウのすべてのインスタンスが同じリストを使用するようにしたい場合は、それを行います。

もう一つは、InitializeComponentを呼び出す前に、コンストラクタで

Resources.Add("MyListKey", MyList); 

を置くことによって、ウィンドウのResourcesコレクションにリストを追加することです。 (キーはStaticResourceマークアップ拡張機能が実行される前にリソースディクショナリにしておく必要があります。)そして、あなたはこのようにそれにバインドすることができます

{Binding Source={StaticResource MyListKey}} 
関連する問題