WPF Windows 응용 프로그램이 있습니다. ViewModel은 Model.TrySomething() 형식의 메서드를 호출합니다.이 메서드는 TrySomething에 논리적으로 실패한 경우 부울을 반환합니다. false가 반환되면 UI는 사용자에게 메시지를 반환 할 수 있습니다.UI에 텍스트 메시지를 보내기위한 효율적인 기술
이 메시지를 모델에서 버블 링하는 가장 좋은 방법은 무엇입니까?
WPF Windows 응용 프로그램이 있습니다. ViewModel은 Model.TrySomething() 형식의 메서드를 호출합니다.이 메서드는 TrySomething에 논리적으로 실패한 경우 부울을 반환합니다. false가 반환되면 UI는 사용자에게 메시지를 반환 할 수 있습니다.UI에 텍스트 메시지를 보내기위한 효율적인 기술
이 메시지를 모델에서 버블 링하는 가장 좋은 방법은 무엇입니까?
이것은 우리가 프로젝트에서 수행하는 방법입니다. 잘 작동 :
// 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);
};
}
}
행운을 빈다.
표시하려는 메시지가 모달 대화 상자 인 경우 뷰 모델에 삽입 된 서비스 (MessageDialogService라는 이름을 지정)를 작성한 다음 MessageDialogService.Show() 메소드를 호출 할 수 있습니다. 이 메서드는 새 WPF 창을 만들고 메시지를 표시합니다.
그러면이 서비스를 모든 ViewModels에서 사용하여 메시지를 표시 할 수 있습니다.
'로드 됨'변수는 무엇입니까? – 4thSpace
this.Loaded는 표준 WPF Window 이벤트입니다. 이 이벤트는 시각적 트리에서 창을 추가하거나 새로 고칠 때마다 발생합니다. 결과적으로 m_Loaded는 단순히 여러 핸들링을 방지합니다. UserControls의 Loaded 처리기에 특히 중요합니다. –