web-dev-qa-db-ja.com

リスト<string>へのWPFデータバインディングコンボボックス

XAMLを使用して、タイプがListのプロパティをコンボボックスにバインドしようとするのに苦労しています。

public List<string> MyProperty  { get; set; }

次のXAMLバインディングは機能しません。

<ComboBox Name="cboDomainNames" ItemsSource="{Binding Path=MyProperty}"/> 

しかし、次の割り当て:

cboDomainNames.ItemsSource = MyProperty;

完璧に動作します。ここで何が欠けていますか?

14
ioWint

回答をマークするためにコメントを投稿する。

私のDataContextが設定されましたが、InitializeComponent()の後に設定されました。それが問題だと思いました。次に、xamlを介してバインドしているときに、ビューが読み込まれると、空のプロパティにバインドが発生することに気付きました。

プロパティは、ビューが読み込まれた後(つまり、_presenter.OnViewReady()で)準備ができると入力されます。これは監視可能なコレクションではないため、コンボボックスには何も追加されません。私の背後にあるコードからそれを指定すると、その時点でプロパティにデータが存在するためです。

8
ioWint

List<Foo>は、ウィンドウ/ページでFoosを呼び出しました。 FooにはプロパティNameがあります。次のようにXAMLでバインディングを設定します。

<ComboBox ItemsSource="{Binding Path=Foos}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValue="{Binding Path=Foo}"
/>

これは、WPFでのデータバインディングの優れた基盤としての this SO questionRead this (WPF DataBindingの概要)に基づいています。

7
Bernoulli IT