11

I have recently parametrized my ViewModel's contructor. Before that, I was doing this in my window:

<Window.DataContext>
    <vm:MyViewModel />
</Window.DataContext>

The framework instantiated the ViewModel for me.

I know I can set DataContext in code but I would prefer a XAML way so designer can display my test data when designing.

Is this possible?

Kugel
  • 18,498
  • 14
  • 69
  • 103

2 Answers2

23

Use an ObjectDataProvider if you want to specify constructor parameters:

<Window.DataContext>
    <ObjectDataProvider ObjectType="vm:MyViewModel"
        xmlns:sys="clr-namespace:System;assembly=mscorlib">
        <ObjectDataProvider.ConstructorParameters>
            <sys:String>A string parameter</sys:String>
            <sys:Int32>42</sys:Int32>
        </ObjectDataProvider.ConstructorParameters>
    </ObjectDataProvider>
</Window.DataContext>
Quartermeister
  • 55,299
  • 7
  • 118
  • 110
13

I have no idea how to pass a contructor-parameter, I think it can't be done (but it would be nice if someone proved me wrong).

What you can do is set properties on your ViewModel, as in

<Window.DataContext>
    <vm:MyViewModel  MyProperty="Hello" />
</Window.DataContext>
Henk Holterman
  • 250,905
  • 30
  • 306
  • 490