我在WPF应用程序中使用MVVM light工具包,我从外部源获取数据。我的MainViewModel c'tor看起来像那样:
public MainViewModel()
{
try
{
GetData();
}
catch (Exception e)
{
//here i want to show error dialog
}
}
我无法发送消息(就像它完成here)来查看,因为ModelView是在View之前创建的,所以没有人可以接收消息并显示对话框。解决这个问题的正确方法是什么?
答案 0 :(得分:1)
You should only throw exceptions from the constructor if initialization fails。在这种情况下,您可以在加载视图时开始检索数据。您可以使用Attached Command Behavior从加载的事件调用VM的命令。
答案 1 :(得分:0)
使用你链接的帖子中的技巧,我会做这样的事情:
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);
}
}