WPF MVVM 调用多个控件窗口
时间: 2024-09-10 13:24:13 浏览: 47
在WPF(Markup Extension and Visual Studio Tools for Applications) MVVM(Model-View-ViewModel)架构中,如果你想要在一个场景中调用并显示多个控件窗口(通常是对话框或模态窗口),你可以按照以下步骤操作:
1. **创建窗体**(Window):每个需要独立显示的控件窗口,例如 `Dialog1.xaml`, `Dialog2.xaml` 等,它们都是自包含的UI模块。
2. **定义ViewModel**(ViewModel):为每个窗口创建相应的ViewModel,比如 `Dialog1ViewModel.cs`, `Dialog2ViewModel.cs`。在这里,ViewModel负责处理逻辑以及与Model的交互。
3. **使用Command或ICommand**:在主ViewModel里,你可以定义一个公共的`ShowDialogCommand`,当被触发时,它可以携带一个特定的ViewModel实例来显示相应的窗口。这通常使用`RelayCommand`或者`ICommand`接口,结合`Task.Run`异步执行以避免阻塞主线程。
```csharp
private readonly IRelayCommand _showDialogCommand;
public MainWindowViewModel()
{
_showDialogCommand = new RelayCommand(() => ShowDialogAsync());
}
private async Task ShowDialogAsync(object viewModelInstance)
{
var dialogViewModel = viewModelInstance as IDialogViewModel; // 假设所有对话框ViewModel实现了IDialogViewModel接口
await Task.Run(() => Application.Current.Dispatcher.Invoke(() =>
{
var dialogWindow = new DialogWindow { DataContext = dialogViewModel };
dialogWindow.ShowDialog();
}));
}
```
4. **调用命令**:在主界面(通常是MainWindow的ViewModel)中,你可以在适当的时机(比如按钮点击、事件处理器等)调用`_showDialogCommand.Execute(null)`,传入你需要显示的ViewModel实例。
阅读全文