WPF:在两个窗口之间共享一个可观察的集合?

时间:2011-04-20 07:32:03

标签: c# wpf xaml wpfdatagrid

我想知道如何在同一个项目中的两个不同的WPF窗口之间共享一个observablecollection。情况似乎很容易,但我还没有找到解决方案。

我有一个Window1,它有一个绑定到obervablecollection的数据网格,如下所示:

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

在Window1中,我能够在_bookLibrary集合中添加/删除BOOK对象,并且数据网格正确更新。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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做同样的事。