Prismのモジュールでダイアログをポップアップするには?

Prismのモジュールでダイアログをポップアップするには?

ユーザーが要求を出した場合、Prismモジュールでダイアログボックスをポップアップする方法は?メインインターフェイスのポップアップAboutダイアログのように?

最后更新 2021/04/14 17:32
沙漠尽头的狼
预计阅读 4 分钟
分类
WPF
专题
WPF MVVMフレームワークPrismシリーズ
标签
.NET WPF Prism Module

ユーザーが要求を出した場合、Prismモジュールでダイアログボックスをポップアップする方法は?メインインターフェイスのポップアップAboutダイアログのように?

网友需求

ウィンドウポップアップ効果について:

デザイナーができることは素晴らしいことです。

この記事は非常に詳細に書くつもりはありませんが、具体的な実践はソースコード(リポジトリリンク付きの最後)を参照することができ、Prismの学習は次の記事を参照することができます:

  1. NET Core 3.x WPF MVVMフレームワークPrismシリーズ(以降共通)
https://dotnet9.com/album/wpf-prism
  1. WPFエンタープライズ開発フレームワーク構築ガイド(アポカリプス)、2020年開始から終了まで
https://jhrs.com/2020/37391.html

1.ダイアログはどのように表示されるか?

1.1汎用ダイアログ·フォーム登録

App.xaml.cs

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
  ...
  containerRegistry.RegisterDialogWindow<DialogWindow>();//注册自定义对话框窗体
  ...
}

如上代码,RegisterDialogWindow为注册对话框窗体代码,即所有弹出的对话框是包裹在DialogWindow内的,代码简单我就不贴了,知道他是一个Window就好,具体请看源码:DialogWindow

1.2実際のダイアログの登録

也是在 App.xaml.cs 文件中,下面的代码即为注册实际的对话框代码:QQ群对话框关于对话模式推荐网站对话框等,括号中的字符串(如"About")用于弹出对话框定位使用,注:实际的对话框是基于UserControl编写的,只有这样才能套入是一个WindowRegisterDialogWindow

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
  ...
  containerRegistry.RegisterDialogWindow<DialogWindow>();//注册自定义对话框窗体
  containerRegistry.RegisterDialog<QQGroupView, QQGroupViewModel>("QQGroup");
  containerRegistry.RegisterDialog<AboutView, AboutViewModel>("About");
  containerRegistry.RegisterDialog<WebView, WebViewModel>("Web");
  ...
}

1.3メニュー起動ダイアログ·ボックス

これはさらに簡単で、メインウィンドウのAboutメニューのようにxaml内で直接使用できます:

<menuitem
  Command="{Binding RaiseShowDialogCommand}"
  CommandParameter="About"
  Header="{markup:I18n {x:Static i18NResources:Language.About}}"
>
  <MenuItem.Icon>
    <Path
      Width="16"
      Data="{StaticResource InfoGeometry}"
      Fill="{DynamicResource SuccessBrush}"
    />
  </MenuItem.Icon>
</menuitem>

RaiseShowDialogCommand在 VM 的基类ViewModelBase定义的,实际调用代码如下:

/// <summary>
/// 显示对话框
/// </summary>
/// <param name="dlgName"></param>
private void RaiseShowDialogHandler(string dlgName)
{
  DialogService.ShowDialog(dlgName);
}

参数dlgName即上面1.2注册对话框时指定的字符串,视情况指定。

2モジュールのダイアログボックスはどのようにポップアップしますか

このセクションが本稿の焦点である。

2.1キー:IModuleのRegisterTypesメソッド

Module是动态加载的,模块中的对话框不可能写在App.xaml.cs中噻?如果你对Prism比较熟悉,看看各模块的Module入口类,即继承IModule的模块入口类方法RegisterTypes(IContainerRegistry containerRegistry),可以在这里注入模块使用的类型和对话框,供本模块或者其他模块使用。

2.2モジュールダイアログの実装

LQClass.ModuleOfLog模块为例,我们在下面注册添加日志对话框:

public void RegisterTypes(IContainerRegistry containerRegistry)
{
  ...
  containerRegistry.RegisterDialog<AddView, AddViewModel>("AddLogView");
  ...
}

AddView为添加日志视图,和一般用户控件没有区别,可参考关于对话框编写,本项目视图链接见AddView.xaml

2.3呼び出す方法は?

调用方式同主窗口菜单一致,代码文件路径:src\LQClass.AdminForWPF\Modules\LQClass.ModuleOfLog\Views添加按钮声明如下:

<Button
  Margin="10,15,10,0"
  Style="{StaticResource ButtonSuccess}"
  Command="{Binding RaiseShowDialogCommand}"
  CommandParameter="AddLogView"
  Content="{markup:I18n {x:Static i18NResources:Language.Add}}"/>

命令参数AddLogView2.2中注册视图时给的名称。

効果は以下のとおりです。実際のビジネスを追加せずに、モジュール内でダイアログボックスをポップアップする方法を示すだけです。

プロジェクトの仕組みは?

说明:本项目服务端基于WTM搭建,客户端由 WPF 编写。

3.1サーバーの実行

如果需要运行查看客户端效果,请先编译服务端src\LQClass.Admin,至于怎么编译,不会的自行百度哦,编译成功后,调试运行服务端项目,或者双击运行服务端 Exe:src\LQClass.Admin\LQClass.Admin\bin\Debug\net5.0\LQClass.Admin.exe,服务端默认开启 5000 端口。

3.2 WPFクライアントを実行する

ソースコードのみを見る場合は、このステップを無視できます。

注意查看App.config,客户端连接服务端的地址是否正确:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<appSettings>
    ...
		<add key="API" value="http://localhost:5000/api/"/>
	</appSettings>
  ...
</configuration>

项目路径:src\LQClass.AdminForWPF,生成成功,调试客户端项目,或者双击客户端 Exe:\src\LQClass.AdminForWPF\Build\LQClass.AdminForWPF.exe即可运行本客户端了。

バックエンドのデフォルト管理者アカウント:

admin
000000

最後に、完全なプレゼンテーション:

ウェアハウスissueへようこそhttps//github.com/dotnet9/lqclass.com

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2023/06/11

7/7

NET Core3環境でMVVMフレームワークPrismのダイアログサービスを使用する方法は、prismシリーズの最後の記事です。

继续阅读
同分类 / 同标签 2023/06/11

6/7

NET Core3でMVVMフレームワークを使用する方法Prism地域ベースのナビゲーションシステム

继续阅读
同分类 / 同标签 2023/06/11

5/7

NET Core3環境でMVVMフレームワークを使用する方法Prismのゾーンマネージャを使用したビューの管理

继续阅读