我正在使用带有MVVM的MahApps.metro WPF库。我有一个ViewModel,我需要从中显示一个Dialog。 MetroWindow具有ShowMessageAsync。但是从ViewModel访问它的正确方法是什么?据我所知,我需要一个View实例,但将其传递给ViewModel并不是一个好方法。
答案 0 :(得分:1)
使用以下方法:
在你绑定窗口的class Test {
MyObj myObj = new MyObj();
public synchronized void test() {
// doing my other stuff
// accessing myObj
}
}
中取Action<T>
ShowMessageAsync
。
现在为Window创建一个行为,并在行为中使用以下代码
ViewModel
现在通过这种方式,您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.
}
ViewModel
可以打开另一个子窗口。