Opening a new window from ViewModel

How do I open new windows? I am currently doing the following.

EventArgs:

public class GenericViewRequestedEventArgs : EventArgs
{
    public GenericViewModel ViewModel { get; private set; }

    public GenericViewRequestedEventArgs(GenericViewModel viewModel)
    {
        ViewModel = viewModel;
    }
}

ViewModel:

public class MainWindowViewModel : ViewModelBase
{
    private RelayCommand _viewSpecificCommand;

    public ICommand ViewSpecificCommand
    {
        get
        {
            if (_viewSpecificCommand == null)
                _viewSpecificCommand = new RelayCommand(x => viewSpecific());

            return _viewSpecificCommand;
        }
    }

    public EventHandler<GenericViewRequestedEventArgs> GenericViewRequested;

    private void RaiseGenericViewRequested(GenericViewModel viewModel)
    {
        var handler = GenericViewRequested;
        if (handler != null)
            handler(this, new GenericViewRequestedEventArgs(viewModel));
    }

    private void viewSpecific()
    {
        RaiseGenericViewRequested(_specificViewModel);
    }
}

View:

public partial class MainWindow : Window
{
    private void OnGenericViewRequested(object sender, GenericViewRequestedEventArgs e)
    {
        GenericWindow window = new GenericWindow(e.ViewModel);
        window.ShowDialog();
    }
}

This works, but it looks like I have a lot of code, and in the end I get the code in my opinion.

  • What is the logic of sending a command in viewmodel?
  • Is it possible to simply use a predicate (if so, why not bind to Enabled) and, possibly, not expose additional viewmodels as properties?
  • Should I attach simple event handlers in XAML (e.g. Click="btnViewSpecific_Click")?
+4
source share
3 answers

, MVVM . , , , ViewModel .

, "" , , unit test , , GenericViewRequested ( , _). . "", .

+2

, "" MVVM. MVVM, . - -, , ..? .

, , .

, Catel IUIVisualizerService, . , . , IUIVisualizerService, , .

** **

Catel, Catel . - , .

+5

, , ViewModel (EmailClient) WPF Application Framework (WAF).

+1

Source: https://habr.com/ru/post/1536096/


All Articles