0

やりたいこと: ListBoxをにバインドしていObservableCollection<MyClass>ます。アイテムを選択するときに、そのプロパティの一部をいくつかのラベルに表示したいと思います。ここでの手順は何ですか?ラベルの内容をに設定しました{Binding Path=PropertyName}。彼らは何をすべきDataContextですか?

方法:ウィンドウのコードビハインドにプライベート変数を保持しており、MyClass selectedItemすべてのバインディングがその変数とそのプロパティを指すようにします。プレゼンテーション要素の選択されたアイテムよりも、コードロジック内で明確な意味を持つ変数にバインドする方が、私には「意味論的」に思えます。

この変数は、いつでも別のMyClassインスタンスを参照できます(ListBox SelectionChangedハンドラーで変更します)。バインディングにそれを反映させたい-selectedItemによって現在参照されているインスタンスのプロパティを常に指すようにする。これはうまくいくでしょうか?バインディングは常に変数が指すオブジェクトを指しますか?または、バインディングを設定した時点で変数が参照しているオブジェクトを指しますか?(後者は私の推測です)

私が考えることができる可能な代替案:それを参照する変数の代わりにリストボックスのSelectedItemにバインドします。これが進むべき道であるならば、それをタイプセーフにする方法は?バインディングが汎用のListBoxItemではなく、MyClassインスタンスで機能していることを確認して、そのプロパティを確認できるようにするにはどうすればよいですか?これは必要ですか?

何か提案、または私が愚かである理由の説明、またはより経験豊富な人からの代替アプローチ?ありがとう!

4

1 に答える 1

3

別のアプローチを使用することをお勧めします。これが、あなたが望むことを行うための一般的な方法だと思います。リストボックスをコードビハインドまたはXAMLに入力しない場合、SelectedItemプロパティはListBoxItemインスタンスではなくMyClassインスタンスを保持します。

次に、ListBoxのSelectedItemプロパティをラベルのDataContextとして使用するか、SelectedItemプロパティにバインドするViewModelにType MyClassのプロパティを作成します(Mode = TwoWay)。次に、次のようにそのプロパティにバインドできます。

<Label Text="{Binding Path=MySelectedItem.Text}"/>

この場合、ラベルのDataContextはViewModelである必要があります。

于 2012-11-26T14:35:51.357 に答える