mvvm模式下在WPF項目中動態載入項目的程式集和類

来源:http://www.cnblogs.com/qinyi173/archive/2017/06/29/7092983.html
-Advertisement-
Play Games

在mvvm模式的wpf項目中有個需求需要去載入解決方案的程式集,並且根據程式集去動態載入當前程式集的類,做成下拉框形式。 效果: wpf窗體: ...


在mvvm模式的wpf項目中有個需求需要去載入解決方案的程式集,並且根據程式集去動態載入當前程式集的類,做成下拉框形式。

效果:

//全局定義
 private ComboBox abList= null;
        /// <summary>
        /// 載入所有項目的程式集
        /// </summary>
        public void LoadAssembly()
        {
            abList=new ComboBox();
            IList<FileInfo> list = new List<FileInfo>();
            FileInfo[] files = new DirectoryInfo(System.Environment.CurrentDirectory).GetFiles("*.dll");
            foreach (FileInfo info2 in files)
            {

                try
                {
                    if (info2.Name.Contains("Reform"))
                    {
                        abList.Items.Add(info2);
                    } 
                }
                catch
                {
                    continue;
                }
                
            }
        }
//屬性定義
 private List<string> assemblyList;
        /// <summary>
        /// 程式集列表下拉框數據源
        /// </summary>
        public List<string> AssemblyList
        {
            get { return assemblyList; }
            set
            {
                assemblyList = value;
                NotifyOfPropertyChange("AssemblyList");
            }
        }
 private List<string> classList;

        /// <summary>
        ///類列表下拉框數據源
        /// </summary>
        public List<string> ClassList
        {
            get { return classList; }
            set
            {
                classList = value;
                NotifyOfPropertyChange("ClassList");
            }
        }
//初始化數據
public InitData ()
{
//給程式集下拉框賦值
foreach (var assemblyListItem in abList.Items)
{
AssemblyList.Add(assemblyListItem.ToString());
}
.......

}

 

/// <summary>
        /// 程式集改變事件 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param> 
        public void abList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                if (e != null && e.AddedItems.Count > 0)
                {
                    ClassList = new List<string>();
                    var Companies = e.AddedItems[0].ToString();
                    //載入對應類
                    foreach (var assemblyItem in abList.Items)
                    {
                        if (assemblyItem.ToString() == Companies)
                        {
                            FileInfo selectedItem = assemblyItem as FileInfo;
                            if (selectedItem != null)
                            {
                                System.Type[] types = Assembly.LoadFile(selectedItem.FullName).GetTypes();
                                foreach (System.Type type2 in types)
                                {
                                    if ((type2.IsClass && type2.IsPublic)&& type2.FullName.Contains("Reform"))
                                    {
                                        ClassList.Add(type2.FullName);//類下拉框賦值
                                    }
                                }
                            }
                            break;
                        }
                    }
                }
                e.Handled = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 類選擇事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void classList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                if (e != null && e.AddedItems.Count > 0)
                {
                    var Companies = e.AddedItems[0].ToString();
                    RightModule.ClassName = Companies;
                }
                e.Handled = true;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

wpf窗體:

//程式集下拉框
                <ComboBox Grid.Row="5" Grid.Column="1" ItemsSource="{Binding AssemblyList}" SelectedIndex="0" cm:Message.Attach="[Event SelectionChanged]=[abList_SelectionChanged($source,$eventArgs)];"  Text="{Binding RightModule.AssemblyName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left"  Width="252" Height="25"  IsEditable="True" Margin="5,3"></ComboBox>

//類下拉框
                <ComboBox Grid.Row="6" Grid.Column="1" ItemsSource="{Binding ClassList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" SelectedIndex="0" cm:Message.Attach="[Event SelectionChanged]=[classList_SelectionChanged($source,$eventArgs)];"  Text="{Binding RightModule.ClassName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left"  Width="252" Height="25"  IsEditable="True" Margin="5,3"></ComboBox>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 根據http和ftp圖片地址獲取對應圖片的縮略圖和原圖 public class GetBitmapImageClass { public BitmapSource GetImageHttp(string url,int width) { var image = new BitmapImage(); ...
  • 首先列出HttpHelper類 /// <summary> /// Http操作類 /// </summary> public class HttpHelper { private static log4net.ILog mLog = log4net.LogManager.GetLogger("Ht ...
  • 前言 關於 ASP.NET Core 2.0 的新功能可以查看我的 "這篇博客" 。 這篇文章是 Priview2中的一些改進。 .NET Core 2.0 Preview2 Azure 的改進 Docker 鏡像轉移到了 Debian Stretch 修複並支持 macOS High Sierra ...
  • 前言 ,想利用小程式導航頁面來提升網站的流量,找到 www.xcxdh666.com 該小程式導航網站。 分析網頁 1 發現網站其實也是用非同步分頁請求載入數據的 ,所以根本用不著xpath 解析html,直接分析其請求url 2點擊載入更多找到請求,發現其實就 pageNum ,cagegory 兩 ...
  • 建議 依賴 <package id="Anotar.NLog.Fody" version="3.3.0" targetFramework="net40" developmentDependency="true" /> <package id="Fody" version="2.1.0" target ...
  • 我們習慣在一個單獨的線程中額外執行一些耗時,或者執行一些可能妨礙其他任務的任務的操作,通過多個線程的合理運用,讓客戶端得到更為快速的響應方式。通過利用單獨的線程去執行 CPU 密集型和 IO 密集型的工作,讓用戶界面一直處於活躍狀態。當然,任何事物都具有兩面性,處理不當的話會誘發線程安全的問題。 創 ...
  • ResourcePath屬性 ResourcePath屬性 一、屬性介紹 獲取或設置圖像存儲路徑,預設設置為“image”,表示的ResourcePath是在程式運行路徑下的Image文件夾(bin\Debug\Image); 該屬性可以設置為Resources參數,也可以是實際路徑。使用Resou ...
  • 【增加一條新的數據】 因為使用資料庫先行的模式,所以將數據保存到資料庫的操作變得非常簡單,你只需要寫簡單的幾行代碼就能將對象的實例保存到資料庫中 你也可以使用下麵的方式,將數據保存到資料庫中 當然保存數據也是支持非同步的 【批量數據插入】 Entity Framework提供了AddRange方法,可 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...