如何从 ViewModel 访问 MetroWindow 的 ShowMessageAsync 方法
How to access ShowMessageAsync method of MetroWindow from ViewModel
我正在使用 MahApps.metro WPF 库和 MVVM。我有一个 ViewModel,我需要从中显示一个对话框。 MetroWindow 具有 ShowMessageAsync。但是从 ViewModel 访问它的正确方法是什么?据我了解,我需要一个 View 实例,但将其传递到 ViewModel 似乎不是一个好方法。
使用以下方法:
在您要与 window 绑定的 ViewModel
中取一个 Action<T>
ShowMessageAsync
。
现在为 Window 创建行为并在行为中使用以下代码
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.Loaded += AssociatedObject_Loaded;
}
void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
if (this.AssociatedObject.DataContext is WindowViewModel)
{
WindowViewModel vm = this.AssociatedObject.DataContext as WindowViewModel;
vm.ShowMessageAsync = OnShowMessageAsync;
}
}
private void OnShowMessageAsync(T param)
{
//Write your logic to call ShowMessageAsync method.
}
现在这样,您可以从 MainWindow
的 ViewModel
打开另一个 child window。
我正在使用 MahApps.metro WPF 库和 MVVM。我有一个 ViewModel,我需要从中显示一个对话框。 MetroWindow 具有 ShowMessageAsync。但是从 ViewModel 访问它的正确方法是什么?据我了解,我需要一个 View 实例,但将其传递到 ViewModel 似乎不是一个好方法。
使用以下方法:
在您要与 window 绑定的
ViewModel
中取一个Action<T>
ShowMessageAsync
。现在为 Window 创建行为并在行为中使用以下代码
protected override void OnAttached() { base.OnAttached(); this.AssociatedObject.Loaded += AssociatedObject_Loaded; } void AssociatedObject_Loaded(object sender, RoutedEventArgs e) { if (this.AssociatedObject.DataContext is WindowViewModel) { WindowViewModel vm = this.AssociatedObject.DataContext as WindowViewModel; vm.ShowMessageAsync = OnShowMessageAsync; } } private void OnShowMessageAsync(T param) { //Write your logic to call ShowMessageAsync method. }
现在这样,您可以从 MainWindow
的 ViewModel
打开另一个 child window。