2011-04-20 76 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

相關問題