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

WPF Prism MVVM技巧【用注入方式在不同項目中訪問主窗體(MainWindow)】

這篇具有很好參考價值的文章主要介紹了WPF Prism MVVM技巧【用注入方式在不同項目中訪問主窗體(MainWindow)】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔


前言

目的是想在Prism MVVM中通過注入的方式來全局訪問主窗體(MainWindow)。

一、項目結(jié)構(gòu)圖

WPF Prism MVVM技巧【用注入方式在不同項目中訪問主窗體(MainWindow)】

項目創(chuàng)建

創(chuàng)建一個Prism Full App(WPF)項目,在Services項目文件夾中創(chuàng)建一個Public_Global項目并創(chuàng)建一個Global.cs類用來注入。

流程步驟

  1. Dongming_BigTest.App.xmal.cs中注入Public_Global.Global類
  2. Dongming_BigTest.App.xmal.cs中給protected override Window CreateShell()將實例化后的主窗體賦值給Global.MainWindow
  3. 在Dongming_BigTest.Modules.ModuleName.ViewModels.ViewAViewModel中獲取主窗體。

二、代碼

1.Global.cs 全局類

using System.Windows.Input;
using System.Drawing;
namespace Public_Global
{
    /// <summary>
    /// 全局變量
    /// </summary>
    public  class Global
    {     
        public static object _SetMainWindow;
        /// <summary>
        /// 設(shè)置窗口
        /// </summary>
        public static object SetMainWindow
        {
            get { return _SetMainWindow; }
            set { _SetMainWindow = value;  }
        }
        object _mainWindow;
        /// <summary>
        /// 全局窗口變量
        /// </summary>
        public object MainWindow
        {
            get { return _mainWindow; }
            set { _mainWindow = value; Changeed(value); }
        }
        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        public  Global()
        {
            MainWindow = SetMainWindow;
        }
        /// <summary>
        /// 當(dāng)MainWindow屬性改變時
        /// </summary>
        /// <param name="value"></param>
        static void Changeed(object value)
        {
            SetMainWindow = value;
        }
    }
}

2.App.cs 程序在這里注入Global

using Dongming_BigTest.Modules.ModuleName;
using Dongming_BigTest.Services;
using Dongming_BigTest.Services.Interfaces;
using Dongming_BigTest.Views;
using Prism.Ioc;
using Prism.Modularity;
using Public_Global;
using System.Windows;
namespace Dongming_BigTest
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App
    {
       public static Window _MainWindow;
        protected override Window CreateShell()
        {
            Global global = new Global();//創(chuàng)建對像
         _MainWindow = Container.Resolve<MainWindow>();
            global.MainWindow = _MainWindow;//把_MainWindow賦值給global.MainWindow 
            return _MainWindow;
        }
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.Register<Global>();//注入Global類
            containerRegistry.RegisterSingleton<IMessageService, MessageService>();
            //containerRegistry.RegisterDialog
        }
        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            moduleCatalog.AddModule<ModuleNameModule>();
        }
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            this.ShutdownMode = ShutdownMode.OnMainWindowClose;
        }
    }
}

3.ViewAViewModel.cs在此類中使用Global.MainWindow

using Dongming_BigTest.Core.Mvvm;
using Dongming_BigTest.Services.Interfaces;
using Prism.Regions;
using Public_Global;
using System.Windows;
namespace Dongming_BigTest.Modules.ModuleName.ViewModels
{
    public class ViewAViewModel : RegionViewModelBase
    {
        private string _message;
        public string Message
        {
            get { return _message; }
            set { SetProperty(ref _message, value); }
        }
        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        /// <param name="regionManager"></param>
        /// <param name="messageService"></param>
        /// <param name="global"></param>
        public ViewAViewModel(IRegionManager regionManager, IMessageService messageService, Global global ) :
            base(regionManager)
        {
            //這里的 global 是一個新的實例 與 APP中的不是同一個,
            //但是在構(gòu)建時用靜態(tài)的SetMainWindow給MainWindow重新賦值了
            //所以在這里可以獲到window的實例
            Window window = global.MainWindow as Window;
            window.Opacity = 0.3;//窗口透明度設(shè)置為0.3
            Message = messageService.GetMessage();
        }
        public override void OnNavigatedTo(NavigationContext navigationContext)
        {
        }
    }
}

總結(jié)

通過本文的方法可以在程序的所有頁面都可以調(diào)用主窗體的內(nèi)容。希望能對大家有綁助,如果誰有更好的方法可以給我留言相互學(xué)習(xí),謝謝了。
源碼下載文章來源地址http://www.zghlxwxcb.cn/news/detail-448597.html

到了這里,關(guān)于WPF Prism MVVM技巧【用注入方式在不同項目中訪問主窗體(MainWindow)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化

    現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化

    ? 概述: 一款名為WPFUI的輕量級開源庫,為WPF應(yīng)用程序提供現(xiàn)代化界面。支持MVVM和 Microsoft.Extensions.DependencyInjection,簡單上手。無第三方依賴,內(nèi)置兩套皮膚,可自定義樣式。適用于一般應(yīng)用場景,不受MVVM框架限制。通過簡單的引用和配置,快速構(gòu)建現(xiàn)代化WPF應(yīng)用,提升用戶

    2024年02月03日
    瀏覽(29)
  • WPF【二】基于MVVM模式,通過點擊按鈕(RadioButton)實現(xiàn)主頁面顯示不同的UserControl

    WPF【二】基于MVVM模式,通過點擊按鈕(RadioButton)實現(xiàn)主頁面顯示不同的UserControl

    效果圖 一、UI界面的按鈕綁定對應(yīng)的命令【Command】以及命令參數(shù)【CommandParameter】 二、 UI【代碼】通過內(nèi)容去綁定需要顯示的UserControl頁 三、 編寫對應(yīng)的ViewModel.cs文件實現(xiàn)對應(yīng)的功能,注意:代碼中SecondWindow以及FirstPageView兩個類是需要用戶鼠標(biāo)右鍵點擊添加【新建項目】選

    2024年02月05日
    瀏覽(21)
  • WPF MVVM之INotifyPropertyChanged接口的幾種實現(xiàn)方式

    序言 ?????? 借助WPF/Sliverlight強(qiáng)大的數(shù)據(jù)綁定功能,可以比實現(xiàn)比MFC,WinForm更加優(yōu)雅輕松的數(shù)據(jù)綁定。但是在使用WPF/Silverlight綁定時,有件事情是很苦惱的:當(dāng)ViewModel對象放生改變,需要通知UI。我們可以讓VM對象實現(xiàn)INotifyPropertyChanged接口,通過事件來通知UI。但問題就出現(xiàn)

    2024年02月16日
    瀏覽(16)
  • WPF 使用MVVM框架創(chuàng)建一個項目

    WPF 使用MVVM框架創(chuàng)建一個項目

    步驟如下: 1、打開Visual Studio 2017(或其他版本),選擇新建項目 2、選擇WPF應(yīng)用(.Net Framework),同時給項目命名,并選擇項目存放路徑,最后點擊確定 3、右鍵點擊解決方案名稱,點擊“管理NuGet程序包”,點擊瀏覽,在輸入框中輸入mvvmlight,點擊MvvmLight進(jìn)行安裝,安裝過程

    2024年02月05日
    瀏覽(33)
  • WPF 項目中 MVVM模式 的簡單例子說明

    WPF 項目中 MVVM模式 的簡單例子說明

    MVVM 是 Model view viewModel 的簡寫。MVVM模式有助于將應(yīng)用程序的業(yè)務(wù)和表示邏輯與用戶界面清晰分離。 幾個概念的說明: model :數(shù)據(jù),界面中需要的數(shù)據(jù),最好不要加邏輯代碼 view : 視圖就是用戶看到的UI結(jié)構(gòu) xaml 文件 viewModel : 業(yè)務(wù)邏輯代碼 綁定器:聲明性數(shù)據(jù)和命令綁定隱含在

    2024年02月11日
    瀏覽(31)
  • 工控視覺項目桌面端WPF源碼,UI源碼,已實現(xiàn)前后端MVVM數(shù)據(jù)綁定

    工控視覺項目桌面端WPF源碼,UI源碼,已實現(xiàn)前后端MVVM數(shù)據(jù)綁定

    工控視覺項目桌面端WPF源碼,UI源碼,已實現(xiàn)前后端MVVM數(shù)據(jù)綁定。 除了兩個柱狀圖用的第三方開源控件,其他都是原生自己寫的,非常適合初學(xué)者熟悉語法、事件、觸發(fā)器、MVVM 機(jī)制、布局容器,方便二次開發(fā)和修改 工控視覺項目桌面端WPF源碼,UI源碼,已實現(xiàn)前后端MVVM數(shù)據(jù)

    2024年02月20日
    瀏覽(21)
  • wpf中prism框架

    wpf中prism框架

    安裝prism包: 添加引用? ?修改完上述,重新生成項目 安裝Prism項目模板 ?安裝過程中關(guān)閉Visual Studio,安裝完畢再打開,即可創(chuàng)建prism框架的項目。

    2024年02月07日
    瀏覽(26)
  • Nlog&Prism&WPF

    Nlog&Prism&WPF

    介紹了為WPF框架Prism注冊Nlog日志服務(wù)的方法 無論是在WPF或者ASP.NET Core當(dāng)中, 都可以使用ServiceCollection來做到著一點, 因為日志框架都提供了IServiceCollection的擴(kuò)展。 但是, 如果現(xiàn)在你使用的是Prism 8.0的應(yīng)用程序, Prism提供了多種容器的支持, 例如:DryIoc或者Unity, 這個時候我們?nèi)绻F(xiàn)

    2024年02月07日
    瀏覽(22)
  • 簡介WPF的Prism框架

    ????????Prism是一個用于在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構(gòu)建松散耦合、可維護(hù)和可測試的 XAML 應(yīng)用程序框架。 ????????Prism是一個用于在WPF、Xamarin Forms、Uno Platform和WinUI中構(gòu)建松耦合、可維護(hù)和可測試的XAML應(yīng)用程序的框架。 每個平臺都有獨立的版本,它們將按照

    2024年02月05日
    瀏覽(30)
  • WPF Prism的簡單使用

    新建 WPF 項目,我是基于 .net 5.0-windows 創(chuàng)建的。 引入 Prism.DryIoc(8.1.97) 的 Nuget 包。 App.xaml 中引入命名空間。 將 App.xaml 中 Application 標(biāo)簽更改成 prism:PrismApplication 并去除 StartUri 屬性,將 App.xaml.cs 中 Application 更改成 PrismApplication 。 實現(xiàn) PrismApplication (實際上是 PrismApplicationBas

    2023年04月14日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包