有時WPF會令人生氣。在WPF窗口和用戶控件之間共享數據的最佳方式是什麼?
我有一個相當簡單的應用程序,它由包含選項卡控件和多個選項卡的單個主窗口組成。我不喜歡在同一個文件中擁有所有選項卡代碼的想法,所以我使用this question的答案將每個選項卡分解爲單獨的用戶控件。
我的主窗口中有一個包含應用程序設置和一些其他應用程序範圍的數據的對象的實例。我的幾個標籤頁需要訪問這些數據才能進行數據綁定。我一直無法找到一個很好的方法來實現這一目標。
首先,我嘗試訪問控制Loaded事件中的父窗口,並獲取對主窗口中暴露設置對象的屬性的引用,如下面的代碼所示。除了Loaded事件以外,這類作品每次標籤獲得焦點時都會被觸發。此外,此事件發生在控件生命週期的後期,因此我無法綁定到用戶控件XAML中此對象的任何屬性。
private void MyUserControl_Loaded(object sender, RoutedEventArgs e)
{
this.ApplicationSettings = ((MainWindow)Window.GetWindow(this)).ApplicationSettings;
}
然後我嘗試將數據傳遞給用戶控件構造函數,但是在XAML中沒有辦法做到這一點。
鑑於這些是應用程序範圍的設置,我可以使ApplicationSettings類成爲singleton並在任何地方引用它,但是我寧願不爲單元測試目的而這樣做。
那麼,如何做到這一點?我的方法是否存在根本上的缺陷?在我看來,所有這些UI元素都是同一個窗口的一部分,因此應該能夠從主窗口訪問數據,但對象模型似乎不允許這樣做。
我認爲這是我要採取的路線。就像我在原帖中所說的那樣,我希望單身人士的行爲沒有實際的單身人士,這就給了我這樣的感覺。實際上,我可能會創建單獨的類,但將構造函數公開用於測試目的。 謝謝! – EricTheRed 2012-01-07 23:18:41