2017-02-23 62 views
0

我處於這種情況,我必須使用static對象作爲我的DataContext。 我讀過很多文章,建議改爲Singleton。但是,由於設計上的限制,我不能走這條路。WPF將靜態對象分配給XAML中的DataContext

我想一個靜態對象分配給我的控制DataContext如下:

<UserControl.DataContext> 
    <local:ViewModelA> 
</UserControl.DataContext> 

但是它總是告訴我,這是無法使用的對象,因爲它沒有定義一個公共的構造函數。

在我的靜態視圖模型中,我有一個靜態構造函數,但由於C#約束它沒有公開。

謝謝

+0

什麼是靜態對象?有靜態類和對象,它們是非靜態類的實例。你的XAML創建了一個非靜態類'ViewModelA'的實例,因此需要一個非靜態的無參數構造函數。 – Clemens

+0

我的viewmodel是一個靜態類。 – John

+0

然後你不能這樣做 – Steve

回答

3

您可以將(非靜態)類的實例只分配給DataContext屬性,而不是一類。

您可以但是有一個綁定到您的靜態類的靜態屬性SomeProperty,如:

<TextBlock Text="{Binding Path=(local:ViewModelA.SomeProperty)}" /> 
+0

我認爲這是唯一可能的4.5或4.6+ – Steve

+0

可能自WPF 4.5。 – Clemens

+0

@Clemens謝謝你的提示。 ()爲什麼重要?沒有它,它就無法工作。與()我得到一個無效的標記錯誤。但是,如果運行該項目,usercontrol的行爲如預期。我正在使用xaml 4.5.2 – John

0

你也可以將在類的靜態一切,但進行實際的類不是一成不變的,它會給你類似的效果是靜態的。

相關問題