欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > wpf prism 《3》 弹窗 IOC

wpf prism 《3》 弹窗 IOC

2024/10/26 10:31:23 来源:https://blog.csdn.net/u013400314/article/details/141645935  浏览:    关键词:wpf prism 《3》 弹窗 IOC

传统的弹窗 这种耦合度高

new 窗体() . Show();
new 窗体() . ShowDialog();

利用Prism 自动的 IOC 弹窗的 必须 必须 必须 页面控件

在这里插入图片描述
弹窗的 必须 必须 必须 页面控件
弹窗的 必须 必须 必须 页面控件
弹窗的 必须 必须 必须 页面控件
弹窗的 必须 必须 必须 页面控件
》》否则 报上面的错误

在这里插入图片描述
在这里插入图片描述
》》主程序

<Window x:Class="BlankApp2.Views.MainView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"Title="{Binding Title}" Height="350" Width="525" ><Grid><Grid.RowDefinitions><RowDefinition Height="50"></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="10"><Button Content="弹窗1" Command="{Binding OpenCommand}" CommandParameter="Popup"></Button><Button Content="弹窗2" Command="{Binding OpenCommand}" CommandParameter="UCPopup"></Button><!--<Button Content="模块Student" Command="{Binding OpenCommand}" CommandParameter="ViewXX"></Button><Button Content="模块C" Command="{Binding OpenCommand}" CommandParameter="ViewC"></Button><Button Content="回退" Command="{Binding BackCommand}"></Button>--></StackPanel><ContentControl Grid.Row="1" prism:RegionManager.RegionName="ContentRegion" /></Grid>
</Window>

》》主程序对应的 ViewModel

using Prism.Commands;
using Prism.Dialogs;
using Prism.Mvvm;
using Prism.Navigation;
using Prism.Navigation.Regions;
using System;
namespace BlankApp2.ViewModels
{public class MainViewModel : BindableBase{private string _title = "Prism Application";public string Title{get { return _title; }set { SetProperty(ref _title, value); }}public DelegateCommand<string> OpenCommand { get; private set; }public IDialogService DialogService { get; }public MainViewModel(IDialogService dialogService){this.DialogService = dialogService;this.OpenCommand = new DelegateCommand<string>(Open);}private void Open(string obj){//传递给弹窗的参数信息DialogParameters keys = new DialogParameters();keys.Add("zen", "============zen============");DialogService.ShowDialog(obj, keys, callback =>{if (callback.Result == ButtonResult.OK){   //弹窗传递的参数信息string ss = callback.Parameters.GetValue<string>("Info");}});}}
}

》》》弹窗用户控件 、弹窗的ViewModel
在这里插入图片描述

<UserControl x:Class="BlankApp2.Views.UCPopup"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:BlankApp2.Views"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"><Grid><Grid.RowDefinitions><RowDefinition Height="20"></RowDefinition><RowDefinition></RowDefinition><RowDefinition Height="80"></RowDefinition></Grid.RowDefinitions><TextBlock Text="{Binding Title}"></TextBlock><TextBlock Text="弹窗信息" FontSize="40" Grid.Row="1"></TextBlock><StackPanel Orientation="Horizontal" Margin="10" HorizontalAlignment="Right" Grid.Row="2"><Button Content="确     定" Margin="10" Command="{Binding OKCommand}"></Button><Button Content="取     消" Margin="10" Command="{Binding CancelCommand}"></Button></StackPanel></Grid>
</UserControl>
using Prism.Commands;
using Prism.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace BlankApp2.ViewModels
{public class UCPopupViewModel : IDialogAware{public string Title { get; set; }public DialogCloseListener RequestClose { get; set; }public DelegateCommand CancelCommand { get; set; }public DelegateCommand OKCommand { get; set; }public UCPopupViewModel(){CancelCommand = new DelegateCommand(Cancel);OKCommand = new DelegateCommand(OKcmd);}private void OKcmd(){DialogParameters keys = new DialogParameters();keys.Add("Info", "======INDO==========");RequestClose.Invoke(keys, ButtonResult.OK);}private void Cancel(){RequestClose.Invoke(ButtonResult.Cancel);}//是否准许关闭弹窗public bool CanCloseDialog(){return true;}//弹窗关闭时【窗体哪个 X】public void OnDialogClosed(){DialogParameters keys = new DialogParameters();keys.Add("Info", "======INDO==========");RequestClose.Invoke(keys, ButtonResult.OK);//throw new NotImplementedException();}//弹窗弹出时触发public void OnDialogOpened(IDialogParameters parameters){if (parameters.ContainsKey("zen")){this.Title = parameters.GetValue<string>("zen");}//throw new NotImplementedException();}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com