2

私はMVVMパターンを使用してプロジェクトを開発しています.プロジェクトには2つのビューモデルがあります.

  1. CountryViewModel および 2.EmpViewModel

countryviewmodel には、国、州、都市などに関する情報を保存しています。

EmpViewModel には、国名を表示するコンボ ボックスがあり、選択した値が CountryViewModel にある国 ID に設定されているコントロールがあります。

コードは次のとおりです。

<ComboBox Grid.Row="0" Grid.Column="1" Margin="3"
             ItemsSource="{Binding CountryViewModel.Countries}" SelectedValue="{Binding Title}"
             SelectedItem="{Binding CountryViewModel.SelectedCountry,Mode=TwoWay}"                               
             SelectedValuePath="Country_Id" DisplayMemberPath="Title">
    </ComboBox>

これはうまくいっています。

EmpViewModel にローカル プロパティの国 ID があり、それを ComboboxCountryViewModelから削除すると取得できる SelectedValue プロパティにバインドしたいと考えていCountryViewModel.SelectedCountryます。

しかし問題は、Country コンボ ボックスに依存する状態用の別のコンボ ボックスがあることです。 編集:つまり、Country ViewModel では、SelectedCountry が変更されたときにメソッド GetAllState() を呼び出しました。

Combobox の SelectedValue プロパティを CountryViewModel の CountryViewModel.SelectedCountry と EmpViewModel の Country_Id の両方にバインドできますか?

4

1 に答える 1

1

回避策を見つけました

インターフェイスに次のメソッドを記述しました。

 public interface IViewModel
{
    T GetValue<T>(string propertyName);
}

カントリー ビュー モデルでは、このメソッドを次のように実装します。

 public override T GetValue<T>(string propertyName)
    {
        T result = default(T);
        result = (T)Convert.ChangeType(this.SelectedCountry, typeof(T), null); }

そして、 Emp View Model に次の行を追加しました:

newEmp.Country_Id = this.CountryViewModel.GetValue<Country>("SelectedCountry").Country_Id;
于 2012-11-28T03:49:03.847 に答える