在没有property元素语法的情况下为XAML中的根元素设置DataContext

时间:2009-10-12 14:54:57

标签: .net wpf xaml datacontext

我想知道是否可以这样写:

<Window 
    ... xmlns definitions ...
    DataContext=<!--Create an instance here-->
></Window>

而不是:

<Window 
    ... xmlns definitions ...
>
   <Window.DataContext>
        <local:CustomViewModel />
   </Window.DataContext>
</Window>

我不需要变通方法来达到同样的效果,我只是好奇第一种语法是否可行。我认为情况并非如此,但值得一提。

2 个答案:

答案 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 它允许您调用方法,构造函数和属性。