国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

WPF開發(fā)之Prism詳解【內(nèi)附源碼】

這篇具有很好參考價值的文章主要介紹了WPF開發(fā)之Prism詳解【內(nèi)附源碼】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

在實(shí)際應(yīng)用開發(fā)中,隨著項(xiàng)目業(yè)務(wù)逐漸復(fù)雜,耦合度會越來越高,維護(hù)成本也會直線上升,所以解耦也變得越來越重要。Prism框架為WPF開發(fā)中解耦提供了非常便捷的應(yīng)用。今天主要以一個簡單的小例子,簡述WPF開發(fā)中Prism框架的簡單應(yīng)用,如有不足之處,還請指正。

什么是Prism?

Prism是一個開源框架,用于在WPF、Xamarin Forms、Uno/Win UI等應(yīng)用中創(chuàng)建松耦合、可維護(hù)、可測試的XAML應(yīng)用程序。Prism提供了一組設(shè)計模式的實(shí)現(xiàn),這些設(shè)計模式有助于編寫結(jié)構(gòu)良好且可維護(hù)的XAML應(yīng)用程序,包括MVVM,dependency injection,commands,EventAggregator等。

Prism源碼庫

Prism遵守開源許可協(xié)議(MIT),目前最新版本8.1.97,可通過GitHub進(jìn)行下載最新版本。https://github.com/PrismLibrary

WPF開發(fā)之Prism詳解【內(nèi)附源碼】

Prism優(yōu)點(diǎn)

?Prism 設(shè)計圍繞核心建筑設(shè)計原則,即關(guān)注點(diǎn)分離和松散耦合。這使得Prism可以提供許多好處

  • 重復(fù)使用:通過重復(fù)使用單元測試的組件,可以通過依賴性注入在運(yùn)行時間輕松發(fā)現(xiàn)和集成,以及通過使用可在應(yīng)用程序中重復(fù)使用的應(yīng)用程序級功能封裝模塊,在應(yīng)用級別實(shí)現(xiàn)重復(fù)使用。

  • 可擴(kuò)展性:通過管理組件依賴性、使組件在運(yùn)行時間更容易集成或替換為替代實(shí)現(xiàn)以及提供將應(yīng)用程序分解為可獨(dú)立更新和部署的模塊的能力,幫助創(chuàng)建易于擴(kuò)展的應(yīng)用程序

  • 靈活性:Prism?有助于創(chuàng)建靈活的應(yīng)用程序,使它們能夠隨著新功能的開發(fā)和集成而更容易更新

  • 團(tuán)隊(duì)發(fā)展:Prism?有助于最大限度地減少跨團(tuán)隊(duì)依賴性,并允許團(tuán)隊(duì)專注于不同的功能領(lǐng)域(如?UI?設(shè)計、業(yè)務(wù)邏輯實(shí)現(xiàn)和基礎(chǔ)架構(gòu)代碼開發(fā)),或不同業(yè)務(wù)級別的功能領(lǐng)域(如簡介、銷售、庫存或物流)。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-414881.html

模塊化思想

通過對比發(fā)現(xiàn),采用模塊化思想進(jìn)行設(shè)計,使得程序結(jié)構(gòu)清晰,符合高內(nèi)聚,低耦合的設(shè)計風(fēng)格。

WPF開發(fā)之Prism詳解【內(nèi)附源碼】 WPF開發(fā)之Prism詳解【內(nèi)附源碼】

?

?

Prism安裝

Prism可通過NuGet方案包管理器進(jìn)行安裝,主要安裝三個Prism.Core,Prism.Unity,Prism.Wpf

?

WPF開發(fā)之Prism詳解【內(nèi)附源碼】

創(chuàng)建模塊和視圖控件

創(chuàng)建WPF類庫,并添加用戶控件視圖,并采用MVVM開發(fā)模式

WPF開發(fā)之Prism詳解【內(nèi)附源碼】

WPF開發(fā)之Prism詳解【內(nèi)附源碼】

?

數(shù)據(jù)綁定

在Prism框架中,提供了數(shù)據(jù)綁定基類Prism.Mvvm.BindableBase,可以方便的將普通屬性,轉(zhuǎn)換為依賴屬性,簡化開發(fā)中過程中的代碼量。

namespace DemoPrism.Second.ViewModels
{
    internal class SecondViewModel : BindableBase
    {
        #region 屬性及構(gòu)造函數(shù)

        private int id;

        public int Id
        {
            get { return id; }
            set { SetProperty(ref id, value); }
        }

        /// <summary>
        /// 模塊間交互
        /// </summary>
        private readonly IEventAggregator eventAggregator;

        public SecondViewModel(IEventAggregator eventAggregator)
        {
            this.eventAggregator = eventAggregator;
            this.eventAggregator.GetEvent<DemoOneEvent>().Subscribe(DemoOneRecived);
        }
        #endregion
        private void DemoOneRecived(int id)
        {
            this.Id = id;
        }
    }
}

創(chuàng)建Prism模塊

添加Module類,并實(shí)現(xiàn)Prism.Modularity.IModule接口,實(shí)現(xiàn)接口的模塊,視為可以被Prism發(fā)現(xiàn)并加載的模塊。以DefectListModule模塊為例:

namespace DemoPrism.First
{
    public class FirstModule : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {
            IRegionManager regionManager = containerProvider.Resolve<IRegionManager>();
            regionManager.RegisterViewWithRegion("FirstRegion", typeof(Views.FirstView));
        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterForNavigation<Views.FirstView, ViewModels.FirstViewModel>();
        }
    }
}

模塊配置

Prism提供了多種模塊加載方式,常用的有App.config配置文件方法。

  1. 在App.config節(jié)點(diǎn),添加configSections配置,增加modules節(jié)點(diǎn)配置

  2. modules節(jié)點(diǎn)主要配置需要加載的Prism模塊

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <!--prism配置-->
    <section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf"/>
  </configSections>
  <modules>
    <!--注冊模塊-->
    <module assemblyFile="Modules\DemoPrism.First.dll" moduleType="DemoPrism.First.FirstModule, DemoPrism.First" moduleName="First" startupLoaded="true" />
    <module assemblyFile="Modules\DemoPrism.Second.dll" moduleType="DemoPrism.Second.SecondModule, DemoPrism.Second" moduleName="Second" startupLoaded="true" />
  </modules>
</configuration>

模塊加載

模塊配置好后,需要在啟動的時候,加載模塊。修改WPF入口啟動程序,App.xaml.cs文件,繼承自Prism.Unity.PrismApplication基類,并重寫相關(guān)初始化

WPF開發(fā)之Prism詳解【內(nèi)附源碼】

?

namespace DemoPrism
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : PrismApplication
    {
        //使用容器創(chuàng)建主窗體
        protected override Window CreateShell() => Container.Resolve<MainWindow>();


        protected override void ConfigureViewModelLocator()
        {
            base.ConfigureViewModelLocator();
        }

        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            //通過代碼的方式添加模塊
            //moduleCatalog.AddModule<NavigationModule.NavigationModule>();
            //將MedicineModule模塊設(shè)置為按需加載
            base.ConfigureModuleCatalog(moduleCatalog);
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {

        }


        protected override IModuleCatalog CreateModuleCatalog()
        {
            ConfigurationModuleCatalog configurationModuleCatalog = new ConfigurationModuleCatalog();
            configurationModuleCatalog.Load();

            //通過Xaml配置文件讀取模塊加載信息

            return configurationModuleCatalog;
            //return directoryModuleCatalog;
        }

        /// <summary>
        /// 注冊適配器(區(qū)域容器:Region)
        /// </summary>
        /// <param name="regionAdapterMappings"></param>
        protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings)
        {
            base.ConfigureRegionAdapterMappings(regionAdapterMappings);
        }
    }
}
?

區(qū)域Region

在Prism框架中,模塊可以注冊到導(dǎo)航菜單Navigation,也可以注冊到區(qū)域Region,根據(jù)實(shí)際業(yè)務(wù)需要進(jìn)行選擇。Region可以更加方便的進(jìn)行模塊化布局等。在普通容器控件中,增加prism:RegionManager.RegionName=”名稱”

WPF開發(fā)之Prism詳解【內(nèi)附源碼】

<Window x:Class="DemoPrism.MainWindow"
        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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:local="clr-namespace:DemoPrism"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"
        prism:ViewModelLocator.AutoWireViewModel="True">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <ContentControl Grid.Column="0" prism:RegionManager.RegionName="FirstRegion"></ContentControl>
        <ContentControl Grid.Column="1" prism:RegionManager.RegionName="SecondRegion"></ContentControl>
    </Grid>
</Window>

模塊交互

模塊與模塊之間相互獨(dú)立,如果需要交互,可以通過事件聚合器IEventAggregator,采用事件的訂閱和發(fā)布進(jìn)行通信。

事件訂閱步驟:

  1. 定義事件,定義一個類,繼承自Prism.Events.PubSubEvent泛型類

  2. 事件發(fā)布,通過事件聚合器的Publish方法進(jìn)行發(fā)布。

  3. 事件訂閱,通過事件聚合器的Subscribe進(jìn)行訂閱。

namespace DemoPrism.Event
{
    /// <summary>
    /// 注冊事件
    /// </summary>
    public class DemoOneEvent : PubSubEvent<int>
    {

    }
}

彈出模態(tài)窗口

?在Prism框架下,彈出模態(tài)窗口,需要以下3個步驟:

  1. 在Prism框架中,頁面UserControl實(shí)現(xiàn)彈窗功能,被彈出頁面需要實(shí)現(xiàn)Prism.Services.Dialogs.IDialogAware接口。

  2. 注冊窗口,將UserControl注冊成窗口。

  3. 調(diào)用彈出服務(wù),彈出窗口

源碼下載

示例中源碼下載,在公眾號恢復(fù)關(guān)鍵詞PRISM,如下所示:

WPF開發(fā)之Prism詳解【內(nèi)附源碼】

學(xué)習(xí)編程,從關(guān)注【老碼識途】開始?。?!

?

到了這里,關(guān)于WPF開發(fā)之Prism詳解【內(nèi)附源碼】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day10

    Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day10

    1-9章節(jié)已經(jīng)把基本功能都做好了,但頁面的數(shù)據(jù)是后臺模擬生成的靜態(tài)數(shù)據(jù)。接下來所有章節(jié)就是實(shí)現(xiàn),頁面的所有數(shù)據(jù)都是從數(shù)據(jù)庫中獲取,并且實(shí)現(xiàn)頁面數(shù)據(jù)的持久化以及增刪改查。 使用Sqlite 做為數(shù)據(jù)庫? 1.打開 MyToDo.Api項(xiàng)目,右鍵=》選擇 管理NuGet 程序包?,進(jìn)行下載安

    2024年01月25日
    瀏覽(21)
  • Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day08

    Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day08

    1.效果圖 MemoView.xaml 頁面代碼 ? ? ?1. 在? ItemsControl 中,添加滾動條? ScrollViewer ?這樣使用 ScrollViewer 把內(nèi)容區(qū)域包裹起來,就能讓內(nèi)容區(qū)域支持滾動了 ? ? ?? 2 . 添加滾動條后的效果圖如下:? 使用md 中的一個自帶動畫 md:TransitioningContent 來實(shí)現(xiàn)該功能? 需要設(shè)置一個屬性,

    2024年02月03日
    瀏覽(20)
  • Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day11

    Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day11

    ?倉儲(rep):倉儲接口定義了對實(shí)體類訪問數(shù)據(jù)庫及操作的方法。它統(tǒng)一管理數(shù)據(jù)訪問的邏輯,并與業(yè)務(wù)邏輯層進(jìn)行解耦。 簡單的理解就是對訪問數(shù)據(jù)庫的一層接口封裝。 工作單元(uow):用來保證我們處理業(yè)務(wù)邏輯的,穩(wěn)定性,完整性。防止在業(yè)務(wù)操作過程中,涉及對數(shù)據(jù)

    2024年02月02日
    瀏覽(32)
  • Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day12

    Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day12

    控制器類需要繼承? ControllerBase 基類 需要添加 [ ApiController]? 特性以及 [ Route]? 特性 Route (路由) 特性參數(shù)規(guī)則,一般寫法是? [Route(\\\"api/[controller]/[action]\\\")] 。也就是路由訪問路徑:前綴api/當(dāng)前控制器/具體的方法 為了業(yè)務(wù)處理邏輯和控制器之間實(shí)現(xiàn)解耦??梢酝ㄟ^設(shè)計:

    2024年01月16日
    瀏覽(25)
  • Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day03

    Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day03

    效果圖: ? 創(chuàng)建 Models ,放置實(shí)體類。 實(shí)體類需要繼承自 Prism 框架的? BindableBase ,目的是讓實(shí)體類支持?jǐn)?shù)據(jù)的動態(tài)變更! ?例如: 系統(tǒng)導(dǎo)航菜單實(shí)體類 創(chuàng)建View文件夾? 放置前端顯示頁面 。例如:創(chuàng)建首頁: MainView.xaml 創(chuàng)建ViewModel 文件夾,放置前端邏輯處理類。意思是:有前端

    2024年02月08日
    瀏覽(23)
  • Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day19

    Wpf 使用 Prism 實(shí)戰(zhàn)開發(fā)Day19

    由于待辦事項(xiàng)功能頁,數(shù)據(jù)已正常渲染出來了。但頁面新增,查詢,修改,刪除等功能還未實(shí)現(xiàn)。本章節(jié)來實(shí)現(xiàn)頁面的請求后臺實(shí)現(xiàn)CURD(增刪改查) 根據(jù)渲染出來的待辦事項(xiàng),點(diǎn)擊對應(yīng)的待辦事項(xiàng)時,查找出該條數(shù)據(jù),顯展示在編輯窗口中。 同時在搜索框中輸入的參數(shù)或選

    2024年04月23日
    瀏覽(26)
  • WPF開發(fā)學(xué)生信息管理系統(tǒng)【W(wǎng)PF+Prism+MAH+WebApi】(四)

    WPF開發(fā)學(xué)生信息管理系統(tǒng)【W(wǎng)PF+Prism+MAH+WebApi】(四)

    最近通過WPF開發(fā)項(xiàng)目,為了對WPF知識點(diǎn)進(jìn)行總結(jié),所以利用業(yè)余時間,開發(fā)一個學(xué)生信息管理系統(tǒng)【Student Information Management System】。前三篇文章進(jìn)行了框架搭建和模塊劃分,后臺WebApi接口編寫,以及課程管理模塊開發(fā),本文在前三篇基礎(chǔ)之上,繼續(xù)深入開發(fā)學(xué)生信息管理系統(tǒng)

    2024年02月04日
    瀏覽(33)
  • 基于Prism框架的WPF前端框架開發(fā)《知產(chǎn)代理數(shù)字化解決方案》

    基于Prism框架的WPF前端框架開發(fā)《知產(chǎn)代理數(shù)字化解決方案》

    最近新開發(fā)了一套WPF前端界面框架,叫《知產(chǎn)代理數(shù)字化解決方案》,采用了時下流行的Prism框架作為整個系統(tǒng)的基礎(chǔ)架構(gòu),演示了Prism中的IRegionManager區(qū)域管理器、IDialogAware對話框、IDialogService對話框服務(wù)、IContainerExtension容器等用法。 系統(tǒng)對常用的控件進(jìn)行了模板和樣式開發(fā)

    2024年01月19日
    瀏覽(24)
  • 實(shí)際開發(fā)中,React應(yīng)用常見問題【持續(xù)更新中】

    實(shí)際開發(fā)中,React應(yīng)用常見問題【持續(xù)更新中】 “react-router-dom”: “^6.14.2”, “react”: “^18.2.0”, 1、監(jiān)聽路由 2、路由編程式導(dǎo)航 useNavigate() 3、路由鏈接導(dǎo)航

    2024年02月15日
    瀏覽(27)
  • Shell腳本開發(fā):printf和test命令的實(shí)際應(yīng)用

    目錄 Shell printf 命令 打印簡單文本 Shell test 命令 1、文件測試 2、字符串比較 3、整數(shù)比較 邏輯運(yùn)算: 當(dāng)你使用Shell中的printf命令時,它可以幫助你格式化和輸出文本。 打印簡單文本 這將簡單地打印字符串\\\"Hello, World!\\\",并在末尾添加一個換行符n來換行。 當(dāng)你使用Shell中的t

    2024年02月10日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包