2011-04-20 39 views
1

我在想如何能够在同一个项目中的两个不同的WPF窗口之间共享一个observablecollection。情况似乎很容易,但我还没有找到解决方案。WPF:在两个窗口之间共享一个可观察的集合?

我有窗口1具有绑定到一个obervablecollection像这样一个DataGrid:

 public Window1() 
    { 
     InitializeComponent(); 
     _bookLibrary = new ObservableCollection<BOOK>();  
     datagrid.ItemsSource = _bookLibrary; 
    } 

在窗口1,我可以添加/删除BOOK对象/从_bookLibrary收集和正确的数据网格更新。

我有另一个窗口,Window2。 Window2使用一个服务引用,它也能够生成BOOK对象。我希望能够将Window2 BOOK对象添加到位于Window1中的_bookLibrary集合(因为Window1具有显示整个库的“主”数据网格)。

我可能想要为Window2 BOOK对象使用单独的集合,然后将该集合与Window1集合合并。

任何想法/建议将不胜感激。谢谢

回答

1

为了我,你必须在你的架构中引入一个模型,并在两个视图之间共享这个模型。因此,您只需将xaml视图绑定到模型的相同属性(集合)即可。

0

似乎是通过使用CollectionViewSource这样做的另一个不MVVM方式:

<CollectionViewSource 
Source="{Binding Source={x:Static Application.Current}, Path=_BookLibrary}" 
x:Key="Window1View" /> 

<CollectionViewSource 
Source="{Binding Source={x:Static Application.Current}, Path=_BookLibrary}" 
x:Key="Window2View" /> 

创建任何你想要的ItemsContainer(如ListBox),并引用适当的集合视图:

<Window name="Window1"> 

<ListBox Name="Master" Grid.Row="2" Grid.ColumnSpan="3" Margin="8" 
ItemsSource="{Binding Source={StaticResource Window1View}}"> 

。 ...

</ListBox> 
</Window> 

为Window2做同样的事情。

+0

对不起,我刚刚意识到我引用我的第二个窗口中的私人对象“_NameLibrary”。另一个简单的解决方案是创建一个对整个应用程序公开的类库,并继续创建2个独特的集合视图 – George 2012-05-03 21:39:59

相关问题