Диалогов прозорец за грешка в MVVM Light Toolkit

Използвам MVVM лек инструментариум в WPF приложение и получавам данни от външен източник. Моят MainViewModel c'tor изглежда така:

    public MainViewModel()
    {
        try
        {
            GetData();
        }
        catch (Exception e)
        {
            //here i want to show error dialog
        }
    }

Не мога да изпратя съобщение (както беше направено тук), за да видите, защото ModelView е създаден преди View, така че няма никой, който да може да получи съобщение и да покаже диалогов прозорец. Какъв е правилният начин за решаване на този проблем?


person shtkuh    schedule 22.12.2011    source източник
comment
използвате ли Dependency Injection?   -  person vidalsasoon    schedule 27.12.2011


Отговори (2)


Трябва да хвърляте изключения от конструктора само ако инициализиране неуспешно. В този случай можете да започнете извличането на данните, когато изгледът е зареден. Можете да извикате команда на VM от зареденото събитие с помощта на Поведение на прикачена команда.

person Tim Cools    schedule 22.12.2011

Използвайки техниката в публикацията, към която сте дали връзка, бих направил нещо подобно:

public MainViewModel()
{
    try
    {
        GetData();
    }
    catch (Exception e)
    {
        Messenger.Default.Send(new DialogMessage(this, e.Message, MessageBoxCallback) { Caption = "Error!" });
    }
}

private void MessageBoxCallback(MessageBoxResult result)
{
    // Stuff that happens after dialog is closed
}


public class View1 : UserControl
{
    public View1()
    {
        InitializeComponent();
        Messenger.Default.Register<DialogMessage>(this, DialogMessageReceived);
    }

    private void DialogMessageReceived(DialogMessage msg)
    {
            MessageBox.Show(msg.Content, msg.Caption, msg.Button, msg.Icon, msg.DefaultResult, msg.Options);
    }
}
person snurre    schedule 22.12.2011
comment
Въпросът изрично посочва, че изгледът все още не е създаден. - person cadrell0; 22.12.2011