1

そのユーザーコントロールのビューモデルのコレクションにバインドされた4つのコンボボックスを持つUserControlがあります。

このコントロールをwpf形式で使用しました。このwpfフォームには、独自のビューモデルがあります。

wpfフォームのビューモデル内の4つのコンボボックスからテキストにアクセスするにはどうすればよいですか?

4

3 に答える 3

0

UserControlは、ビューモデルとなる追加するフォームのデータコンテキストを継承する必要があります。UserControlのバインディングは、継承されたデータコンテキストに関連します。ビューモデルプロパティにバインドしようとしましたComboBox.Textか?

アップデート

申し訳ありませんが、質問を読み間違えました。ユーザーコントロールにすでに独自のビューモデルがあることを確認しませんでした。

より良いアプローチがあるように見えますが、各コンボボックスのテキストを公開するユーザーコントロールの依存関係プロパティを公開することができます。大声で考えているだけです。

于 2012-07-19T21:02:34.003 に答える
0

これを行う唯一のクリーンな方法はバインディングを使用することです。推奨される唯一の方法は、ユーザーコントロールDependencyPropertyがViewModelまたは個々のテキストプロパティ(sellmeadogによって提案された)を消費用に公開する場合です。次に、その依存関係プロパティに直接バインドするプロパティを親ViewModelに含めることができます。

于 2012-07-19T21:55:08.073 に答える
0

編集:私はあなたが異なるビューモデルを持っているのを見ました。今では、ユーザーコントロールの使用とmvvmの使用に依存します:)

  • メッセンジャーまたはeventaggregatorを使用して、選択されたアイテムをusercontrolviewmodelからmainviewmodelに通信できます。
  • usercontrolでRelativeSourceバインディングを使用して、選択したアイテムをmainviewmodelに直接バインドすることもできます(usercontrolは、コントロールの単なる組み合わせです)。
  • ユーザーコントロールのビューモデルを削除し、すべてをメインビューモデルに入れて、私の古い例を取り上げることができます
  • usercontrol!(usercontrol viewmodel!ではありません!)でSelectedItemsのDependencyPropertiesを作成し、これらをmainviewmodelのプロパティにバインドできます。usercontrolが実際のusercontrolである場合、これが最もクリーンな方法だと思います。

古い例:ビューモデル内://実際のコードはもちろんINotifyPropertyChanged適切に実装して発生させる必要があります

 public ObservableCollection<string> MyFirstCollection {get; set;}//init once, add,remove,clear to alter

 public string MySelectedCombobox1Value {get;set;}

ユーザーコントロールで:

 <ComboBox ItemsSource="{MyFirstCollection }" SelectedItem="{Binding MySelectedCombobox1Value, Mode=TwoWay}" />

それはすべてあなたの質問に関連しています。必ず正しく設定してくださいDataContext。これは、snoopなどのツールで確認できます。私が投稿したコードは、コンボボックスのdataconextがビューモデルであることを期待していました。

于 2012-07-20T06:24:50.653 に答える