2017-05-29 62 views
1

我使用MVVM与Caliburn.Micro,我有一个问题。 所以我有2个组合框视图。首先是代表一个国家和第二个citites列表。我希望每当第一个列表中的国家发生变化时都要更新城市列表,并列出相应的城市列表。我的问题是城市列表不更新。 这里是我的代码:MVVM Caliburn.micro组合框国家城市不能正常工作

public class MyViewModel : PropertyChangedBase 
{ 
    Company company = new Company(); 
    List<string> countries = new List<string> {"USA","Germany" }; 
    public string Name 
    { 
     get { return company.name; } 
     set { company.name = value; 
     } 
    } 
    public List<string> Countries 
    { 
     get { return countries; } 
     set { 
      company.country = ToString(); 
      NotifyOfPropertyChange(() => Countries); 
      NotifyOfPropertyChange(() => Cities); 
     } 
    } 
    public List<string> Cities 
    { 
     get { 
      switch (company.country) 
      { 
       case "USA": return new List<string> { "New York", "Los Angeles" }; 
       case "Germany": return new List<string> { "Hamburg", "Berlin" }; 
       default: return new List<string> { "DEFAULT", "DEFAULT" }; 

      } 
      } 
     set { company.city = value.ToString(); 
      NotifyOfPropertyChange(() => Cities); 
     } 
    } 

} 

现在的城市名单仍与默认成员(默认值,默认值)。该视图只包含2个相应名称的组合框:

<Grid> 
     <ComboBox x:Name="Countries" /> 
     <ComboBox x:Name="Cities" /> 
</Grid> 

有些建议吗? 对不起,我的英语不好。

回答

0

绑定全国ComboBox的向视图模型的来源属性SelectedItem属性:

<ComboBox x:Name="Countries" ItemsSource="{Binding Countries}" SelectedItem="{Binding SelectedCountry}" /> 
<ComboBox x:Name="Cities" ItemsSource="{Binding Cities}" /> 

...,提高PropertyChanged事件为Cities财产这一块的二传手:

public class MyViewModel : PropertyChangedBase 
{ 
    Company company = new Company(); 
    List<string> countries = new List<string> { "USA", "Germany" }; 
    public string SelectedCountry 
    { 
     get { return company.country; } 
     set 
     { 
      company.country = value; 
      NotifyOfPropertyChange(() => SelectedCountry); 
      NotifyOfPropertyChange(() => Cities); 
     } 
    } 
    public List<string> Countries 
    { 
     get { return countries; } 
     set 
     { 
      countries = value; 
      NotifyOfPropertyChange(() => Countries); 
      NotifyOfPropertyChange(() => Cities); 
     } 
    } 
    public List<string> Cities 
    { 
     get 
     { 
      switch (company.country) 
      { 
       case "USA": return new List<string> { "New York", "Los Angeles" }; 
       case "Germany": return new List<string> { "Hamburg", "Berlin" }; 
       default: return new List<string> { "DEFAULT", "DEFAULT" }; 

      } 
     } 
    } 
} 

有关如何实现这种级联的完整示例和更多信息,请参阅以下博文:ComboBoxeshttps://blog.magnusmontin.net/2013/06/17/cascading-comboboxes-in-wpf-using-mvvm/