2009-10-12 41 views
0

我在想,如果有可能寫出這樣的事:設置的DataContext在XAML根元素沒有屬性元素語法

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

取而代之的是:

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

我不需要解決方法來實現相同的效果,我只是好奇,如果第一種語法是可能的。我不認爲這是事實,但值得提問。

回答

2

我可以看到這個乾淨的唯一方法是寫自己的MarkupExtension使用Activator.CreateInstance(或您的DI容器)來創建虛擬機,從而給你這樣的語法:

<UserControl DataContext="{CreateNew local:CustomViewModel}" 
+0

工作就像一個魅力,謝謝! – RobSullivan 2009-10-12 22:04:03

0

怎麼樣的DataContext = 「{X:靜態SomeClass.SomeProperty}」,然後在SomeClass的:

public static object SomeProperty { get { return new object(); } } 

如果目標是要創建類型。我不確定x:Static是否緩存了它曾經檢索過的對象,但是如果不是,這將起作用。您也可以嘗試起訴ObjectDataProvider 它允許您調用方法,構造函數和屬性。