pejoter
pejoter

Reputation: 49

WPF/MVVM windowsservice without viewmodel reset

I'm want to remove from my view model's creating of view's

I wrote WinodwsService class to creating a new window:

public class WindowService : IWindowService
{
    public void ShowWindow(object viewModel)
    {
        //var win = new DXWindowCloasable(viewModel);
        var win = new DXWindow();
        win.Content = viewModel;
        win.DataContext = viewModel;
        win.ShowDialog();

    }
}

In view model I call method:

var vm = new PolaPrzewoznikowViewModel(konf);
IWindowService wnf = new WindowService(); // this is only for test
wnf.ShowWindow(vm);

In UserControl I have defined view model type:

<UserControl.DataContext>
    <local:PolaPrzewoznikowViewModel />
</UserControl.DataContext>

When I have this, I can drill down (CTRL + B) on commands, and user an code completition when I'm projecting a View - this is very helpful.

But... when I use win.ShowDialog(); the new view model is created. And displayed view has view model without parameters (default constructor).

How can I use window service and keep defined UserControl.DataContext in view?

Upvotes: 1

Views: 296

Answers (2)

FantasticFiasco
FantasticFiasco

Reputation: 1193

Why are you setting both the content and the datacontext of the window?

Regarding intellisense you should do as ASh suggests, the data context by its nature will be available to all view descendants.

If you don't want to implement the window service yourself you can always use my framework https://github.com/FantasticFiasco/mvvm-dialogs.

Upvotes: 0

ASh
ASh

Reputation: 35720

instead of initializing DataContext in xaml

<UserControl.DataContext>
    <local:PolaPrzewoznikowViewModel />
</UserControl.DataContext>

I suggest to use DesignInstance:

<UserControl d:DataContext="{d:DesignInstance Type=local:PolaPrzewoznikowViewModel, 
                             IsDesignTimeCreatable=True}" ...>

It will give IntelliSense and designer enough information in design-time, but a new instance won't be created in run-time (there will only DataContext from WindowService)

Upvotes: 2

Related Questions