用于向UI发送文本消息的高效技术

时间:2011-08-30 20:39:31

标签: c# .net wpf

我有一个WPF Windows应用程序。 viewmodel以Model.TrySomething()的格式调用一个方法,如果TrySomething中的任何内容在逻辑上失败,则返回一个布尔值。如果返回false,则UI可以将消息返回给用户。

从模型中提取此消息的最佳方法是什么?

2 个答案:

答案 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中使用此服务来显示消息。