2011-08-30 2 views
0

WPF Windows 응용 프로그램이 있습니다. ViewModel은 Model.TrySomething() 형식의 메서드를 호출합니다.이 메서드는 TrySomething에 논리적으로 실패한 경우 부울을 반환합니다. false가 반환되면 UI는 사용자에게 메시지를 반환 할 수 있습니다.UI에 텍스트 메시지를 보내기위한 효율적인 기술

이 메시지를 모델에서 버블 링하는 가장 좋은 방법은 무엇입니까?

답변

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); 
     }; 
    } 
} 

행운을 빈다.

+0

'로드 됨'변수는 무엇입니까? – 4thSpace

+0

this.Loaded는 표준 WPF Window 이벤트입니다. 이 이벤트는 시각적 트리에서 창을 추가하거나 새로 고칠 때마다 발생합니다. 결과적으로 m_Loaded는 단순히 여러 핸들링을 방지합니다. UserControls의 Loaded 처리기에 특히 중요합니다. –

0

표시하려는 메시지가 모달 대화 상자 인 경우 뷰 모델에 삽입 된 서비스 (MessageDialogService라는 이름을 지정)를 작성한 다음 MessageDialogService.Show() 메소드를 호출 할 수 있습니다. 이 메서드는 새 WPF 창을 만들고 메시지를 표시합니다.

그러면이 서비스를 모든 ViewModels에서 사용하여 메시지를 표시 할 수 있습니다.

관련 문제