.net 将组合框项目绑定到另一个组合框的SelectedItem

.net 将组合框项目绑定到另一个组合框的SelectedItem,.net,silverlight,caliburn.micro,.net,Silverlight,Caliburn.micro,我有两个组合框。第一,Companys有一组Company对象。每个对象都有一个字符串名称和字符串集合: 下面是课堂: public class clsCompany : PropertyChangedBase { public string Name { get; set; } public BindableCollection<string> Regions; public override string ToString() {

我有两个组合框。第一,Companys有一组Company对象。每个对象都有一个字符串名称和字符串集合:

下面是课堂:

public class clsCompany : PropertyChangedBase
{
    public string Name { get; set; }
    public BindableCollection<string> Regions;
    public override string ToString()
    {
        return Name;
    }
}
公共类CLS公司:PropertyChangedBase
{
公共字符串名称{get;set;}
公共收藏区;
公共重写字符串ToString()
{
返回名称;
}
}
这是代码。当我选择一个项目时,文本框会很好地更新。但应显示区域的组合框不:

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


使第二个组合框工作的唯一方法是在我的ViewModel上创建一个与SelectedCompany.Regions关联的新属性,但为什么我没有工作?

如果您将公司设为CollectionView,那么您应该能够将第二个组合绑定到公司的.CurrentItem.Regions。

您的问题是由于缺少属性更改通知。更新公司时,还需要为该公司区域发出属性更改通知,以便区域
组合框
知道其源也已更新。您可以通过将公司和SelectedCompany属性更改为以下内容来实现此目的:

public BindableCollection<Company> Companys { get; set; }
private Company _selectedCompany;
public Company SelectedCompany
{
    get { return _selectedCompany; }
    set
    {
        _selectedCompany = value;
        NotifyOfPropertyChange(() => SelectedCompany);
        NotifyOfPropertyChange(() => SelectedCompany.Regions);
    }
}
publicbindablecollection公司的{get;set;}
私人公司(选定公司);;
上市公司选定公司
{
获取{return\u selectedCompany;}
设置
{
_所选公司=价值;
财产变更通知(()=>所选公司);
NotifyOfPropertyChange(()=>SelectedCompany.Regions);
}
}

请解释这是如何回答问题的。代码示例可能会有所帮助。Companys是一个BindableCollection-什么是CollectionView?我确实这样做了,但仍然没有更新SelectedCompany\u Regions组合框。@Daniel Hmmmmm…据我所知,这是一个适用于这种情况的示例应用程序…谢谢-我的Regions是Company类中的一个字段,而不是属性。这就是问题所在。啊,是的,ViewModelBinder只搜索属性