当前位置: 首页 > news >正文

WPF实战学习笔记22-添加自定义询问窗口

添加自定义询问窗口

详细代码:https://github.com/DongLiqiang/Mytodo/commit/221de6b2344d5c861f1d3b2fbb2480e3e3b35c26

添加自定义询问窗口显示方法

修改文件Mytodo.Extensions.DialogExtension

添加内容,类中添加内容

/// <summary>
/// 显示方法
/// </summary>
/// <param name="name"></param>
/// <param name="parameters"></param>
/// <param name="dialogHostName"></param>
/// <returns></returns>
public static async Task<IDialogResult> Question(this IDialogHostService dialogHost,string Title, string Content, string dialogHostName = "Root")
{DialogParameters  param = new DialogParameters();//添加参数param.Add("Title", Title);param.Add("Content", Content);param.Add("DialogHostName", dialogHostName);//返回对话框实例return await dialogHost.ShowDialog("MsgView",param, dialogHostName); 
}

自定义窗体

自定义界面

添加文件Mytodo.Views.MsgView.xaml

<UserControlx:Class="Mytodo.Views.MsgView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:Mytodo.ViewModels"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"d:DesignHeight="450"d:DesignWidth="800"mc:Ignorable="d"><Grid><Grid.RowDefinitions><RowDefinition Height="auto" /><RowDefinition /><RowDefinition Height="auto" /></Grid.RowDefinitions><TextBlockPadding="5"d:Text="温馨提示"FontSize="14"Text="{Binding Title}" /><TextBlockGrid.Row="1"Padding="15,0"VerticalAlignment="Center"d:Text="确认删除该数据吗?"FontSize="14"Text="{Binding Content}" /><StackPanelGrid.Row="2"Margin="10"HorizontalAlignment="Right"Orientation="Horizontal"><ButtonMargin="0,0,10,0"Command="{Binding CancelCommand}"Content="取消"Style="{StaticResource MaterialDesignOutlinedButton}" /><Button Command="{Binding SaveCommand}" Content="确定" /></StackPanel></Grid>
</UserControl>

添加窗体模型

添加文件:Mytodo.ViewModels.MsgViewModel

using MaterialDesignThemes.Wpf;
using Mytodo.Dialog;
using MyToDo.Share.Models;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Mytodo.ViewModels
{class MsgViewModel: BindableBase, IDialogHostAware{#region 命令定义#endregion#region 属性定义/// <summary>/// 对话框内容/// </summary>public string Content{get { return content; }set { content = value; }}/// <summary>/// 对话框标题 /// </summary>public string Title{get { return title; }set { title = value; }}#endregion#region 重要字段定义#endregion#region 字段定义private string content;private string title;#endregionpublic MsgViewModel(){SaveCommand = new DelegateCommand(Save);CancelCommand = new DelegateCommand(Cancel);}/// <summary>/// 取消/// </summary>private void Cancel(){if (DialogHost.IsDialogOpen(DialogHostName))DialogHost.Close(DialogHostName, new DialogResult(ButtonResult.No)); //取消返回NO告诉操作结束}/// <summary>/// 确定/// </summary>private void Save(){if (DialogHost.IsDialogOpen(DialogHostName)){//确定时,把编辑的实体返回并且返回OKDialogParameters param = new DialogParameters();DialogHost.Close(DialogHostName, new DialogResult(ButtonResult.OK, param));}}public string DialogHostName { get; set; }public DelegateCommand SaveCommand { get; set; }public DelegateCommand CancelCommand { get; set; }public void OnDialogOpend(IDialogParameters parameters){//获取Titleif (parameters.ContainsKey("Title"))Title = parameters.GetValue<string>("Title");//获取Contentif (parameters.ContainsKey("Content"))Content = parameters.GetValue<string>("Content");}}
}

依赖注入

修改:App.xaml.cs

RegisterTypes函数添加

containerRegistry.RegisterForNavigation<MsgView, MsgViewModel>();

使用

主界面

修改文件:Mytodo.Views.MainView.cs

修改为

using Mytodo.Common.Events;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Prism.Events;
using Mytodo.Extensions;
using MaterialDesignThemes.Wpf;
using Mytodo.Dialog;
using Prism.Ioc;namespace Mytodo.Views
{/// <summary>/// MainView.xaml 的交互逻辑/// </summary>public partial class MainView : Window{ private readonly IDialogHostService dialoghost;/// <summary>/// 订阅消息/// </summary>public MainView(IEventAggregator aggregator,IContainerProvider provider){//检索实例dialoghost= provider.Resolve<IDialogHostService>();aggregator.Register(arg =>{DialogHost.IsOpen = arg.IsOpen;if (DialogHost.IsOpen)DialogHost.DialogContent = new ProgressView();});InitializeComponent();menuBar.SelectionChanged += (s, e) =>{drawerHost.IsLeftDrawerOpen = false;};btnclo.Click += async  (s, e) =>{//展开确认对话框var queres = await DialogExtension.Question(dialoghost, "温馨提示", $"是否要关闭此程序?");if (queres.Result != Prism.Services.Dialogs.ButtonResult.OK) return;this.Close();};btnmin.Click += (s, e) =>{this.WindowState = WindowState.Minimized;};btnmax.Click += (s, e) =>{this.WindowState = WindowState.Maximized;};ColorZone.MouseMove += (s, e) =>{if (e.LeftButton == MouseButtonState.Pressed)this.DragMove();};ColorZone.MouseDoubleClick += (s, e) =>{if (WindowState != WindowState.Normal)WindowState = WindowState.Normal;elseWindowState = WindowState.Maximized;};}}
}

待办

修改文件Mytodo.ViewModels.TodoViewModel.cs

添加内容

private readonly IDialogHostService dialoghost;

修改内容:

public TodoViewModel(ITodoService service,IContainerProvider provider) : base(provider)
{//检索对话框的实例dialoghost = provider.Resolve<DialogHostService>();//初始化对象TodoDtos = new ObservableCollection<ToDoDto>();  RightContentTitle = "添加血雨待办";//初始化命令SelectedCommand         = new DelegateCommand<ToDoDto>(Selected);OpenRightContentCmd     = new DelegateCommand(Add);ExecuteCommand          = new DelegateCommand<string>(ExceuteCmd);DeleteCommand           = new DelegateCommand<ToDoDto>(DeleteItem);this.service = service;
}        
/// <summary>
/// 删除指定项
/// </summary>
/// <param name="dto"></param>
async private void DeleteItem(ToDoDto dto)
{//展开确认对话框var queres = await DialogExtension.Question(dialoghost, "温馨提示", $"是否要删除此项?{dto.Title}?");if (queres.Result != Prism.Services.Dialogs.ButtonResult.OK) return;var delres = await service.DeleteAsync(dto.Id);if (delres.Status){var model = TodoDtos.FirstOrDefault(t => t.Id.Equals(dto.Id));TodoDtos.Remove(dto);}
}

备忘录

修改文件Mytodo.ViewModels.MemoViewModel.cs

添加内容

 private readonly IDialogHostService dialoghost;

修改内容

/// <summary>
/// 删除指定项
/// </summary>
/// <param name="dto"></param>
async private void DeleteItem(MemoDto dto)
{//展开确认对话框var queres = await DialogExtension.Question(dialoghost,"温馨提示",$"是否要删除此项?{dto.Title}?");if (queres.Result != Prism.Services.Dialogs.ButtonResult.OK) return;var delres = await service.DeleteAsync(dto.Id);if (delres.Status){var model = MemoDtos.FirstOrDefault(t => t.Id.Equals(dto.Id));MemoDtos.Remove(dto);}
}
public MemoViewModel(IMemoService service, IContainerProvider provider) : base(provider)
{//初始化对象MemoDtos = new ObservableCollection<MemoDto>();RightContentTitle = "添加备忘率";//初始化命令SelectedCommand = new DelegateCommand<MemoDto>(Selected);OpenRightContentCmd = new DelegateCommand(Add);ExecuteCommand = new DelegateCommand<string>(ExceuteCmd);DeleteCommand = new DelegateCommand<MemoDto>(DeleteItem);//检索DialogHostService类型的实例dialoghost = provider.Resolve<DialogHostService>();this.service = service;
}
http://www.lryc.cn/news/101747.html

相关文章:

  • Spring Boot项目的创建
  • Python加载数据的5种方法
  • QPoint、QLine、QSize、QRect
  • vue+leaflet笔记之地图量测
  • “深入理解SpringBoot:从入门到精通的几个关键要点“
  • 数值线性代数: 共轭梯度法
  • 【JVM】详解对象的创建过程
  • 华纳云:ubuntu下如何搭建nfs服务
  • HCIA实验二
  • stm32 舵机 cubemx
  • 无涯教程-jQuery - Spinner组件函数
  • Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
  • docker基于centos7镜像安装python3.7.9
  • JavaScript中的switch语句
  • Jquery笔记
  • 【C++】优先级队列的基本概念以及其模拟实现
  • TextClamp for Vue3.0(Vue3.0的文本展开收起组件)
  • 区间预测 | MATLAB实现VAR向量自回归时间序列区间预测
  • 在 Windows 上搭建 NTP 服务器
  • 应急响应经典案例-FTP 暴力破解
  • 41. linux通过yum安装postgresql
  • SpringBoot启动流程及自动配置
  • 【Linux】进程轻松入门
  • 【使用时空RBF-NN进行非线性系统识别】实现了 RBF、分数 RBF 和时空 RBF 神经网络,用于非线性系统识别研究(Matlab代码实现)
  • Tomcat 安装配置教程及成功后,启动失败报错解决方案
  • C#文件操作从入门到精通(2)——查看某个dll中有哪些函数
  • 二分查找算法(全网最详细代码演示)
  • draw up a plan
  • 抖音seo源码开发源代码开发技术分享
  • QEMU(Quick Emulator)