2013-08-29 29 views
0

我有一個帶有MainWindow的WPF應用程序。 MainWindow由幾個類型爲ObservableCollection的CLR屬性組成。 MainWindow有一個DataGrid,其ItemsSource屬性綁定到其中一個可觀察集合(正常工作)。接下來,我有一個對話框。其目的是在數據網格中顯示主窗口中的一個可觀察集合。該對話框在MainWindow中實例化。最初,我將ObservableCollection傳遞給對話框的構造函數,並將其複製到對話框的CLR屬性中。然後,我將該對話框的DataContext設置爲它自己,並將DataGrid中的ItemsSource屬性綁定到CLR屬性的名稱。這工作得很好。試圖將datagrid項目源綁定到另一個類中的屬性

有沒有更好的方法來做到這一點,而不是通過構造函數傳遞可觀察集合?我嘗試使用GUI編輯器將對話框中Datagrid的ItemsSource屬性設置爲MainWindow中的可觀察集合,該編輯器使用RelativeAncestor生成綁定,但數據未顯示。問題是我有一堆對話框是爲了顯示來自MainWindow的數據,我覺得應該有一個更簡單的解決方案,而不是將所有內容都傳遞給對話框的構造函數。另外,對話框會被視爲SubViews?主窗口是一個視圖。

回答

1

假設您的Dialog控件名爲DialogControl並且在其代碼後面定義了一個名爲ItemsDependencyProperty。在XAML,我想這個屬性綁定到DataGrid這樣的:

<DataGrid ItemsSource="{Binding Items, RelativeSource={RelativeSource Mode= 
FindAncestor, AncestorType={x:Type DialogControl}}" /> 

RelativeSource結合將熄滅,並通過你DialogControl類的屬性搜索並找到Items財產。注意:請不要將的DataContext設置爲自己。

MainWindow.xaml.cs文件

現在你實例化你的DialogControl,您可以設置Items屬性:

DialogControl dialogControl = new DialogControl(); 
dialogControl.Items = someCollection; 
dialogControl.Show(); 

UPDATE >>>

哦,我看你現在後在做什麼......你想要將您的UserControl綁定到MainWindow.xaml.cs文件中的實際集合。您仍然可以遵循我的建議,但您的DialogControl中不包含DependencyProperty,您需要將其放入MainWindow.xaml.cs文件中。在這種情況下,你在UserControl結合將是:

<DataGrid ItemsSource="{Binding Items, RelativeSource={RelativeSource Mode= 
FindAncestor, AncestorType={x:Type MainWindow}}" /> 

對於這項工作,在Items財產必須DependencyProperty

+0

謝謝,但我已經這樣做了。而不是設置Items字段,我將它傳遞給構造函數。它只是一個標準的CLR屬性,而不是一個依賴屬性。這工作正常,但我只是想知道是否有辦法做到這一點,而無需將可觀察集合複製到items屬性。 – Alex

+0

謝謝,我會嘗試解決方案。你是外星人? – Alex

+0

哈哈......我猜你說的是我的照片......那是Photoshop。 – Sheridan

相關問題