Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WPF在不同的上下文中使用不同的SelectedItem_.net_Wpf_Data Binding - Fatal编程技术网

.net WPF在不同的上下文中使用不同的SelectedItem

.net WPF在不同的上下文中使用不同的SelectedItem,.net,wpf,data-binding,.net,Wpf,Data Binding,我有一个树形的数据图,我需要显示给用户,让用户从中选择。为了简单起见,假设我有一个街道列表,每个街道包含一个房屋列表,每个街道包含一个居住在那里的人的列表。大概是这样的: interface IStreet { string Name {get;} IReadOnlyCollection<IHouse> Houses {get;} } interface IHouse { int StreetNumber {get;} IReadOnlyCollec

我有一个树形的数据图,我需要显示给用户,让用户从中选择。为了简单起见,假设我有一个街道列表,每个街道包含一个房屋列表,每个街道包含一个居住在那里的人的列表。大概是这样的:

interface IStreet {
    string Name {get;}
    IReadOnlyCollection<IHouse> Houses {get;}
}

interface IHouse {
    int StreetNumber {get;}
    IReadOnlyCollection<IPerson> People {get;}
}

interface IPerson {
    string Name {get;}
}
+------------------------------------------------+
|  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组合框绑定到
{Binding Path=Houses}
并将其设置为与当前项同步时,它们将维护各自的“当前项”,但是,这并没有发生。所以现在,当我为其中任何一个人选择房子时,其他人也会改变。我的问题是,有没有什么优雅的方法可以让这个设置与绑定一起工作,或者我必须回到手动填充组合框的方式,一旦更改?

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

要有两个游标,需要两个


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

,这比我提出的要好得多。我使用IValueConverter为每个
组视图
制作了一份集合的副本。当您想要操作列表和/或其项目时,可能仍然需要一份副本(尽管不是通过使用valueconverter)。尽管如此,当试图从并发性的角度设想可能发生的场景时,这将引起严重的头痛。集合是只读的是有原因的。不应该发生突变,所以并发性不应该是个问题。它们只有getter:)。数据从磁盘(db或平面文件)读取,用户只需选择2。