2017-02-23 56 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

你也可以将在类的静态一切,但进行实际的类不是一成不变的,它会给你类似的效果是静态的。

相关问题