2009-10-12 3 views
0

Je me demandais s'il est possible d'écrire quelque chose comme ceci:Réglage DataContext pour l'élément racine dans XAML sans la syntaxe d'élément de propriété

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

Au lieu de cela:

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

Je ne besoin de solutions de contournement pour obtenir le même effet, je suis juste curieux de savoir si le premier type de syntaxe est possible du tout. Je ne pense pas que ce soit le cas, mais cela vaut la peine de demander.

Répondre

2

La seule façon que je peux voir à cela est proprement écrire votre propre MarkupExtension qui utilise Activator.CreateInstance (ou votre conteneur DI) pour créer la machine virtuelle, vous donnant ainsi une syntaxe comme ceci:

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

A travaillé comme un charme, merci! – RobSullivan

0

Que diriez-vous DataContext = "{x: statique SomeClass.SomeProperty}", puis dans SomeClass:

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

Où objet est le type que vous voulez créer. Je ne suis pas sûr que x: Static met en cache l'objet une fois récupéré mais sinon, cela fonctionnerait. Vous pouvez également essayer de poursuivre ObjectDataProvider Il vous permet d'appeler des méthodes, des constructeurs et des propriétés.

Questions connexes