我有一个WPF Windows应用程序。 viewmodel以Model.TrySomething()的格式调用一个方法,如果TrySomething中的任何内容在逻辑上失败,则返回一个布尔值。如果返回false,则UI可以将消息返回给用户。
从模型中提取此消息的最佳方法是什么?
答案 0 :(得分:0)
这就是我们在项目中的表现。工作正常:
// your event args might include more properties
public class ShowMessageBoxEventArgs : System.EventArgs
{
public string Title { get; set; }
public string Text { get; set; }
}
// example of your model base
public class MyModelBase
{
public event EventHandler<ShowMessageBoxEventArgs> ShowMessageBox;
protected void RaiseShowMessageBox(string title, string text)
{
if (ShowMessageBox == null)
return;
var _Args = new ShowMessageBoxEventArgs
{
Text = text,
Title = title
};
ShowMessageBox(this, _Args);
}
}
// for this sample, this is your view model
public class MyModel : MyModelBase
{
public void DoSomething()
{
// TODO: Do Something
base.RaiseShowMessageBox("DoSomething", "Complete!");
}
}
// this is your window or in app.xaml.cs (where we do it)
public partial class MainWindow : Window
{
MyModel m_MyModel = new MyModel();
public MainWindow()
{
InitializeComponent();
this.DataContext = m_MyModel;
Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
bool m_Loaded = false; // only once
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
if (m_Loaded)
return;
m_Loaded = true;
// allow model to show messagebox
m_MyModel.ShowMessageBox += (s, arg) =>
{
MessageBox.Show(arg.Text, arg.Title);
};
}
}
祝你好运!
答案 1 :(得分:0)
如果要显示的消息是模式对话框,则可以编写一个服务(将其命名为MessageDialogService),该服务将在viewmodel中注入,然后调用MessageDialogService.Show()方法。此方法创建一个新的WPF窗口并显示该消息。
然后,可以在任何ViewModel中使用此服务来显示消息。