2010-09-19 52 views
0

編輯3:TLDR-版本WPF數據綁定辛格爾頓屬性(從多個Windows)

我有一個單身DependencyObject說我綁定用戶控件來。某些用戶控件位於主窗口中,其中一些顯示在單獨的窗口(設置窗口)中。出現在設置窗口中的那些不能正確綁定,並且不會影響單例中的值。


我有一個單身人士DependencyObject,我用它來存儲應用程序範圍的設置。我還得到了一個設置對話框,用戶(理論上)可以使用它來控制單身內部的值。

該應用程序很大程度上處理文檔,所以我需要能夠存儲多個不同項目的字體設置。所以我創建了一個名爲FontSettings的DependencyObject,它包含諸如字體家族和字體大小之類的依賴屬性。

對於需要單獨控制的項目的每個「部分」,有不同的DependencyObject

所以,嵌套對象的整個結構看起來像:

MySettings 
{ 
    PropertyGroup AProperties; 
    PropertyGroup BProperties; 
    PropertyGroup CProperties; 
} 

PropertyGroup 
{ 
     FontSettings FontStgs; 
} 

每個PropertyGroup是一種獨特的DependencyObject,但他們都將包含一個FontSettings對象。

所以,因爲我知道我需要在許多地方顯示FontSettings對象的設置控件,所以我創建了一個簡單的UserControl來修改它們。我認爲我可以簡單地將UserControl的DataContext綁定到我希望它修改的FontSettings對象,因此,UserControl中的更改將反映在MySettings對象中(UserControl內部的控件是綁定到FontSettings的屬性)。但是當我在UserControl的構造函數上設置斷點時,DataContext在初始化後始終爲空。

如果這不夠清楚是有幫助的,讓我知道,我會發布實際的代碼。

這裏是我的XAML的片段設置窗口內:

<local:FontSettingsControl DataContext="{Binding Source={x:Static stg:MySettings.Instance}, Path=PageHeaderSettings.CompanySettings}" />    

CompanySettings是FontSettings類型。

TLDR版本: 我似乎無法得到DataContext正確綁定。如果是這樣,我認爲這些控件會正確地影響設置。

我需要將DataContext指向CompanySettings DependencyObject。

到CompanySettings對象的完整路徑是:

的設置單MySettings.Instance.PageHeaderSettings.CompanySettings:MySingleton

編輯:

檢查出來的東西與探聽後,它出現DataContext沒有被設置。我的綁定表達有問題嗎?

編輯2:

好像我的問題是從事實,我想綁定到用戶控件是一個窗口,是不是主窗口出現。當我將UserControl放在主窗口中時,所有工作都按預期工作。那麼,有沒有人知道問題實際是由什麼引起的(我認爲它有根源於線程)以及我應該如何繼續設置我的設置窗口功能?

回答

0

你真的在運行時遇到問題嗎?通過檢查構造函數中的值來測試的方式不會告訴你任何事情,因爲直到控件初始化完成並加載後才能設置Bindings中的值。即使您在XAML中爲控件的實例設置了本地值而不是綁定,它也會在構造函數退出後發生(就像執行new FontSettingsControl() { DataContext = myData });一樣)。請嘗試使用Snoop在運行時檢查DataContext值。

+0

首先出錯的是UserControl(FontSettingsControl)具有綁定到名爲FontSize的屬性的ComboBox,但是當我更改ComboBox中的值時,MySettings.Instance.PageHeaderSettings.CompanySettings中的對應值對象不會更新。我要去看看Snoop,看看我能否找到更準確的錯誤位置。 – 2010-09-20 13:01:01