WPF在不同的上下文中有不同的SelectedItem

时间:2013-07-10 08:12:43

标签: .net wpf data-binding

我有一个树形的数据图表,我需要向用户显示并让用户选择。为简单起见,假设我有一份街道列表,每个街道都包含一份房屋清单,每个房屋都包含一份居住人员名单。像这样:

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”ComboBox将IsSynchronizedWithCurrentItem设置为true,并将两个组框DataContext绑定到{Binding Path=Streets/}。我希望通过设置组框的DataContext,它会创建单独的上下文,这样当我将House-ComboBox绑定到{Binding Path=Houses}并将其设置为与当前项目同步时,它们将保持然而,每个他们自己的“当前项目”都没有发生。所以现在,当我为任何一个人选择一所房子时,其他人也会改变。我的问题是,有什么优雅的方法可以使这个设置与绑定一起工作,或者我是否必须回到填充组合框OnChange的手动方式?

1 个答案:

答案 0 :(得分:1)

你正在街上的人使用默认的CollectionViewSource(我总是认为这些是游标)。

要使用两个游标,您需要两个 CollectionViewSources

您可以在代码或Xaml中创建这些代码并将组框绑定到两个CollectionViewSources