我想知道如何在同一个项目中的两个不同的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集合合并。
任何想法/建议将不胜感激。谢谢
答案 0 :(得分:1)
为了我,你必须在你的架构中引入一个Model,并在两个视图之间共享该模型。因此,您只需将xaml视图绑定到模型的相同属性(集合)。
答案 1 :(得分:0)
使用CollectionViewSource
:
<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做同样的事。