WPF:在两个窗口之间共享一个可观察集合
本文关键字:一个 集合 观察 共享 两个 WPF 窗口 之间 | 更新日期: 2023-09-27 17:50:43
我想知道如何在同一个项目中的两个不同的WPF窗口之间共享一个可观察的集合。情况似乎很简单,可是我还没有找到解决办法。
我有一个Window1,它有一个数据网格,绑定到一个可观察的集合,像这样:
public Window1()
{
InitializeComponent();
_bookLibrary = new ObservableCollection<BOOK>();
datagrid.ItemsSource = _bookLibrary;
}
在Window1中,我能够从_bookLibrary集合中添加/删除BOOK对象,并且数据网格更新正确。
我有另一个窗口,Window2。Window2使用的服务引用也能够生成BOOK对象。我希望能够将Window2 BOOK对象添加到位于Window1的_bookLibrary集合中(因为Window1具有显示整个库的"主"数据网格)。
我可能在考虑为Window2 BOOK对象使用一个单独的集合,然后将该集合与Window1集合合并。
任何想法/建议都将非常感谢。由于对我来说,您必须在您的体系结构中引入一个模型,并在两个视图之间共享该模型。因此,您只需在xaml中将两个视图绑定到模型的相同属性(集合)。
似乎还有另一种非MVVM的方法,通过使用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>