2016-06-15 17 views
0

私は、ユーザーがコンボボックスを使って選択できるインスタンスを表示したいと思います。コンボボックスは、ObservableCollection<string> Names {get;set;}のすべてのエントリをバインディングで取得します。バインドして操作するオブジェクトのインスタンス?

このインスタンスのすべてのプロパティをバインドで表示する最適な方法は何ですか?

私の考えはObservableCollection<Foo> Bar {get;set;}を作成することでした。 ユーザーはコンボボックス内のエントリを選択しました。 私はこの名前のインスタンスをObservableCollection<Foo> Bar {get;set;}で検索し、それを新しいインスタンスFoo TMPBar {get;set;}にコピーします。 このインスタンスはGUIにバインドする必要があります。

これは良い解決方法ですか?

+1

ComboBoxの 'SelectedItem'プロパティを使用してください。既に選択された 'Foo'インスタンスを返します。何もコピーする必要はありません。 – Clemens

+0

@Clemens問題は、ComboBoxは名前だけをObservableCollectionから表示することです。この 'OberservableCollection'の中には名前しかありません。名前を選択した後、 'ObservableCollection Bar {get; set;}'内の正しいインスタンスを検索したいと思います。それは正しい方法ですか? – MyNewName

+0

ComboBoxの 'ItemsSource'を' ObservableCollection 'にバインドし、' DisplayMemberPath'をFooクラスの適切なnameプロパティに設定します。 – Clemens

答えて

0

コンボボックスを名前のリストにバインドするのではなく、実際のオブジェクトのリストにバインドし、コンボボックスのDisplayMemberPathプロパティを使用して名前を表示します。

次に、SelectedItemプロパティでオブジェクトに直接アクセスできます。

だから、必要があります:あなたのビューモデルで

public ObservableCollection<Foo> Bar { get; set; } 
public Foo Selected { get; set; } 

を、そして:

<ComoboBox ItemsSource="{Binding Bar}" 
      DisplayMemberPath=Name 
      SelectedItem="{Binding Selected}" /> 

あなたのビューで。

関連する問題