2010-11-24 70 views
1

假設我有一個幾個用戶控件,如:如何在後臺代碼中訪問xaml對象以進行自定義usercontrol?

UC1,UC2

UC2包括XAML UC1像

<my:uc1 x:Name = "myuc1" /> 

然後在後面的新用戶控件的代碼,我想創建UC2的實例,並訪問UC1,如:

uc2 mycontrol = new uc2(); 
uc2.myuc1.DataContext = myViewModel; 
.... 

我有錯誤,因爲myuc1是不是在後面的代碼訪問的,但我可以在UC2代碼BEH訪問myuc1 IND!不知道爲什麼。

錯誤消息說: UC2不包含「myuc1」

定義如何解決這個問題呢?

回答

0

你不是應該訪問變量的myuc1,而不是類型?

例如:

uc2 mycontrol = new uc2(); 
mycontrol.myuc1.DataContext = myViewModel; 
+0

謝謝。我在帖子中輸入錯誤。應該是mycontrol.myuc1.DataContext = myViewModel;我得到了未定義錯誤的錯誤。 – KentZhou 2010-11-24 19:06:05

+0

在這種情況下,我無法重現問題。我創建了一個快速應用程序,如何拼寫出來,並且能夠訪問myuc1。 – Jason 2010-11-24 19:40:56

0

這就是原因UC2包括UC1。因此,myuc1可以在uc2中進行訪問,因爲它將被編譯爲專用字段。如果你真的想公開這個實例 - 在uc2中創建屬性。 例如

公共UC1 MyUC1 {{返回myuc1}}

+0

這可能是這種情況。當我試圖重現它時,所有內容都在同一個程序集中,因此內部可見。 – Jason 2010-11-24 20:09:13

0

我能想到的,爲什麼你的代碼是行不通的,因爲你的新用戶控件在不同的項目中的唯一原因從你的uc1和uc2控制。表示命名控件的字段具有內部可訪問性,因此不能用於其他項目。

在我看來不使這些領域的私人是不是一個好的選擇,事實上動態創建的字段都並不好。歷史VB6/VBA的Smacks形式給我。

我建議你添加相應的屬性和方法UC2將操縱UC1,而不是允許外部代碼直接擺弄UC1。

如果由於某種原因,你不能採取這種做法考慮將在一個公共屬性包裝訪問控制。還要考慮創建一個uc1可以實現的接口,其中包含您想要訪問的所有方法和屬性,使此公共屬性返回該接口而不是uc1類型。

相關問題