将ComboBox Box项绑定到另一个Combobox的SelectedItem

时间:2011-05-18 04:06:32

标签: .net silverlight caliburn.micro

我有两个组合框。第一个,Companys有一组公司对象。每个对象都有一个字符串Name和string collection:

这是班级:

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

这是代码。选择项目时,TextBox会更新。但是应该显示区域的ComboBox不会:

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

我可以让第二个ComboBox工作的唯一方法是在我的ViewModel上创建一个与SelectedCompany.Regions相关联的新属性但是为什么我没有工作?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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