如何将Combobox的Selected项绑定到两个不同的Property?

时间:2012-11-23 09:43:53

标签: mvvm binding combobox silverlight-5.0

我正在使用MVVM模式开发项目。在项目中我有两个viewmodel即

  1. CountryViewModel和2. EmpViewModel
  2. 在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,并希望将其绑定到Combobox的SelectedValue属性,如果我从CountryViewModel删除CountryViewModel.SelectedCountry,我可以获取该属性。

    但问题是我有另一个状态组合框,它依赖于国家组合框。 编辑:即在Country ViewModel中,当SelectedCountry更改时,我调用了方法GetAllState()。

    那么我可以将Combobox的SelectedValue属性绑定到CountryViewModel的CountryViewModel.SelectedCountry和EmpViewModel的Country_Id吗?

1 个答案:

答案 0 :(得分: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;