我有一个树形的数据图,需要向用户显示并让用户从中选择。为简单起见,假设我有一个街道列表,每个街道都包含一个房屋列表,每个都包含一个居住在那里的人的列表。像这样的东西:
interface IStreet {
    string Name {get;}
    IReadOnlyCollection<IHouse> Houses {get;}
}
interface IHouse {
    int StreetNumber {get;}
    IReadOnlyCollection<IPerson> People {get;}
}
interface IPerson {
    string Name {get;}
}
我在 WPF 中有一个表单,用户应该选择 2 个不同的人,但他们都必须住在同一条街上。像这样的东西:
+------------------------------------------------+
|  Street:                                       |
|  +------------------------------------------+  |
|  | Pick street                            ▾ |  |
|  +------------------------------------------+  |
|                                                |
|  + - Person 1 (Group box) - - - - - - - - - +  |
|  |  House:                                  |  |
|  |  +------------------------------------+  |  |
|  |  | Pick house                       ▾ |  |  |
|  |  +------------------------------------+  |  |
|  |                                          |  |
|  |  Person:                                 |  |
|  |  +------------------------------------+  |  |
|  |  | Pick peron                       ▾ |  |  |
|  |  +------------------------------------+  |  |
|  + - - - - - - - - - - - - - - - - - - - - -+  |
|                                                |
|  + - Person 2 (Group box) - - - - - - - - - +  |
|  |  House:                                  |  |
|  |  +------------------------------------+  |  |
|  |  | Pick house                       ▾ |  |  |
|  |  +------------------------------------+  |  |
|  |                                          |  |
|  |  Person:                                 |  |
|  |  +------------------------------------+  |  |
|  |  | Pick peron                       ▾ |  |  |
|  |  +------------------------------------+  |  |
|  + - - - - - - - - - - - - - - - - - - - - -+  |
+------------------------------------------------+
我首先将“Pick street”组合框IsSynchronizedWithCurrentItem设置为 true,并将两个组合框绑定DataContext到{Binding Path=Streets/}. 我的希望是,通过设置DataContext组框,它将创建单独的上下文,这样当我将 House-ComboBox 绑定到{Binding Path=Houses}并将其设置为与当前项目同步时,他们将维护每个自己的“当前项目”,但是,这没有发生。所以现在,当我为任何一个人选择一所房子时,另一个人也会改变。我的问题是,有什么优雅的方法可以使这个设置与绑定一起工作,还是我必须回到手动填充组合框的方式OnChange?