我想知道是否可以这样写:
<Window
... xmlns definitions ...
DataContext=<!--Create an instance here-->
></Window>
而不是:
<Window
... xmlns definitions ...
>
<Window.DataContext>
<local:CustomViewModel />
</Window.DataContext>
</Window>
我不需要变通方法来达到同样的效果,我只是好奇第一种语法是否可行。我认为情况并非如此,但值得一提。
答案 0 :(得分:2)
我能够清楚地看到这一点的唯一方法是编写自己的MarkupExtension
,使用Activator.CreateInstance
(或您的DI容器)来创建VM,从而为您提供如下语法:
<UserControl DataContext="{CreateNew local:CustomViewModel}"
答案 1 :(得分:0)
DataContext =“{x:Static SomeClass.SomeProperty}”然后在SomeClass中如何:
public static object SomeProperty { get { return new object(); } }
对象是您要创建的类型。我不确定x:静态缓存它曾经检索过的对象,但如果没有,这将有效。您也可以尝试起诉ObjectDataProvider 它允许您调用方法,构造函数和属性。