多窗口调用控件

项目开发中,涉及多窗口调用控件,利用多线程、委托,直接实例化调用均不能控制另一窗口控件

原因:在窗口调用中实例化会覆盖已经更改的控件

解决方法:将空间设为静态,直接调用即可

在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实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值