2011-05-18 135 views
1

我有两个组合框。第一个,Companys有一个公司对象的集合。每个对象都有一个字符串名称和字符串集合:将ComboBox Box项目绑定到另一个Combobox的SelectedItem上

这里是类:

public class clsCompany : PropertyChangedBase 
{ 
    public string Name { get; set; } 
    public BindableCollection<string> Regions; 
    public override string ToString() 
    { 
     return Name; 
    } 
} 

这里是代码。当我选择一个项目时,TextBox更新就好了。但是,这应该显示区域的组合框不会:

<ComboBox x:Name="Companys" DisplayMemberPath="Name" Width="100"/> 
<ComboBox x:Name="SelectedCompany_Regions" Width="100"/> 
<TextBlock x:Name="SelectedCompany_Name" Width="100" /> 

我能得到第2组合框的唯一途径是建立在我的视图模型,其与SelectedCompany.Regions相关联的新属性,但为什么做什么,我没有工作?

回答

0

您的问题是由缺少属性更改通知引起的。当您更新公司时,您还需要为该公司的区域提出物业更改通知,以便区域ComboBox知道其来源也已更新。您可以通过将公司和SelectedCompany属性更改为以下来实现此目的:

public BindableCollection<Company> Companys { get; set; } 
private Company _selectedCompany; 
public Company SelectedCompany 
{ 
    get { return _selectedCompany; } 
    set 
    { 
     _selectedCompany = value; 
     NotifyOfPropertyChange(() => SelectedCompany); 
     NotifyOfPropertyChange(() => SelectedCompany.Regions); 
    } 
} 
+0

我这样做,但仍然没有更新SelectedCompany_Regions组合框。 – 2011-05-24 15:19:53

+0

@Daniel Hmmmmm ...继承人一个示例应用程序,适用于这种情况,据我所知... https://docs.google.com/leaf?id = 0B29ZkEHowpX0MGQ5M2U4NTItODNiMC00ZWM0LWE1ZTAtNWRjZGM5YTU5Njgx&hl = en_US&authkey = CPLW6tsH – 2011-05-24 19:58:21

+0

谢谢,我的地区是一个领域,而不是属性,在公司类。这是问题。 – 2011-05-24 22:55:53

0

如果您使Companys成为CollectionView,那么您应该能够将第二个组合绑定到Companys.CurrentItem.Regions。

+0

请解释这是如何回答问题的。代码示例可能会有所帮助。 – 2011-05-18 17:36:33

+0

Companys是一个BindableCollection - 什么是CollectionView? – 2011-05-19 14:46:14