Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF将静态对象分配给XAML中的DataContext_C#_Wpf_Static_Datacontext - Fatal编程技术网

C# WPF将静态对象分配给XAML中的DataContext

C# WPF将静态对象分配给XAML中的DataContext,c#,wpf,static,datacontext,C#,Wpf,Static,Datacontext,我的情况是必须使用静态对象作为我的数据上下文。 我读过很多帖子,建议改为使用单例类。但是,由于设计限制,我不能走这条路线 我想为我的控件DataContext分配一个静态对象,如下所示: <UserControl.DataContext> <local:ViewModelA> </UserControl.DataContext> 然而,它一直告诉我它是不可用的对象,因为它没有定义公共构造函数 在我的静态视图模型中,我有一个静态构造函数,但由于C#约

我的情况是必须使用
静态
对象作为我的
数据上下文
。 我读过很多帖子,建议改为使用
单例
类。但是,由于设计限制,我不能走这条路线

我想为我的控件
DataContext
分配一个静态对象,如下所示:

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

然而,它一直告诉我它是不可用的对象,因为它没有定义公共构造函数

在我的静态视图模型中,我有一个静态构造函数,但由于C#约束,它不是公共的


谢谢

您只能将(非静态)类的实例分配给
DataContext
属性,而不能分配给类

但是,您可以绑定到静态类的静态属性
SomeProperty
,例如:

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

您只能将(非静态)类的实例分配给
DataContext
属性,而不能分配给类

但是,您可以绑定到静态类的静态属性
SomeProperty
,例如:

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


您也可以使类中的所有内容都是静态的,但使实际的类不是静态的,这会给您一个与静态类似的效果。

您也可以使类中的所有内容都是静态的,但使实际的类不是静态的,这会给您一个与静态类似的效果。

什么是静态对象?有静态类和对象,它们是非静态类的实例。您的XAML创建了一个非静态类的实例
ViewModelA
,因此需要一个非静态无参数构造函数。我的viewmodel是一个静态类。那么不,您不能这样做什么是静态对象?有静态类和对象,它们是非静态类的实例。您的XAML创建了一个非静态类
ViewModelA
的实例,因此需要一个非静态无参数构造函数。我的viewmodel是一个静态类。那么,不,您不能这样做。我认为这只在4.5或4.6+版本中可能,因为WPF 4.5。@Clemens感谢您的提示。为什么路径的()很重要?没有它就不行。对于()我得到了一个无效的标记错误。但是如果运行该项目,usercontrol的行为将与预期的一样。我使用的是XAML4.5。2@Clemens我关闭了VisualStudio并重新打开它,现在它就像语法一样。您不觉得这种行为很奇怪吗?请参阅“数据绑定中对象的属性路径->单个属性、附加属性或其他类型限定属性”一节,了解为什么需要括号。我认为这只在4.5或4.6+版本中可能,因为WPF 4.5。@Clemens感谢您的提示。为什么路径的()很重要?没有它就不行。对于()我得到了一个无效的标记错误。但是如果运行该项目,usercontrol的行为将与预期的一样。我使用的是XAML4.5。2@Clemens我关闭了VisualStudio并重新打开它,现在它就像语法一样。您不觉得这种行为很奇怪吗?请参阅数据绑定中对象的PropertyPath部分->单个属性、附加或其他类型限定,了解为什么需要括号。