添加自定义询问窗口
详细代码:https://github.com/DongLiqiang/Mytodo/commit/221de6b2344d5c861f1d3b2fbb2480e3e3b35c26
添加自定义询问窗口显示方法
修改文件Mytodo.Extensions.DialogExtension
添加内容,类中添加内容
c#
/// <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
<UserControl
x: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>
<TextBlock
Padding="5"
d:Text="温馨提示"
FontSize="14"
Text="{Binding Title}" />
<TextBlock
Grid.Row="1"
Padding="15,0"
VerticalAlignment="Center"
d:Text="确认删除该数据吗?"
FontSize="14"
Text="{Binding Content}" />
<StackPanel
Grid.Row="2"
Margin="10"
HorizontalAlignment="Right"
Orientation="Horizontal">
<Button
Margin="0,0,10,0"
Command="{Binding CancelCommand}"
Content="取消"
Style="{StaticResource MaterialDesignOutlinedButton}" />
<Button Command="{Binding SaveCommand}" Content="确定" />
</StackPanel>
</Grid>
</UserControl>
添加窗体模型
添加文件:Mytodo.ViewModels.MsgViewModel
c#
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;
#endregion
public 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))
{
//确定时,把编辑的实体返回并且返回OK
DialogParameters 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)
{
//获取Title
if (parameters.ContainsKey("Title"))
Title = parameters.GetValue<string>("Title");
//获取Content
if (parameters.ContainsKey("Content"))
Content = parameters.GetValue<string>("Content");
}
}
}
依赖注入
修改:App.xaml.cs
RegisterTypes函数添加
c#
containerRegistry.RegisterForNavigation<MsgView, MsgViewModel>();
使用
主界面
修改文件:Mytodo.Views.MainView.cs
修改为
c#
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;
else
WindowState = WindowState.Maximized;
};
}
}
}
待办
修改文件Mytodo.ViewModels.TodoViewModel.cs
添加内容
private readonly IDialogHostService dialoghost;
修改内容:
c#
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
添加内容
c#
private readonly IDialogHostService dialoghost;
修改内容
c#
/// <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;
}