C# WPF 實現Tab頁動態增減

概述

Tab頁面是一個很常用的控件,針對頁面固定的場景,直接給Item進行數據綁定就行,如下所示:

<dx:DXTabControl cal:Message.Attach="[Event Loaded]=[TabControl_Loaded($source,$eventArgs)]"><dx:DXTabItem Header="{Binding Region[0]}" Visibility="{Binding TabPageDispaly[0]}"><ContentControl  cal:View.Model="{Binding ParamPage}" /></dx:DXTabItem><dx:DXTabItem Header="{Binding Region[1]}" Visibility="{Binding TabPageDispaly[1]}"><ContentControl  cal:View.Model="{Binding ParamPage}"/></dx:DXTabItem><dx:DXTabItem Header="{Binding Region[2]}" Visibility="{Binding TabPageDispaly[2]}"><ContentControl  cal:View.Model="{Binding ParamPage}"/></dx:DXTabItem></dx:DXTabControl>

但是針對頁面需要動態增減的場景,這種方法就不再適用了,下面就針對這種情況進行講解.

數據定義

[AddINotifyPropertyChangedInterface]public class UserInfos{/// <summary>/// Header/// </summary>public int Header { get; set; }/// <summary>/// 姓名/// </summary>public string UserName { get; set; }public EventAggregatorViewModel EventAggregatorViewModel { get; set; }}

這里定義了一個標題Header ,用戶名UserName ,以及另外個ViewModel類

數據集合定義:

public BindableCollection<UserInfos> UserInformationList { get; set; }

邏輯實現

后臺實現-數據添加:這里有幾個頁面就add幾組數據

try{UserInformationList = new BindableCollection<UserInfos>();UserInformationList.Add(new UserInfos(){Header = 1,UserName = "張三",EventAggregatorViewModel = new EventAggregatorViewModel()}); UserInformationList.Add(new UserInfos(){Header = 2,UserName = "李四",EventAggregatorViewModel = new EventAggregatorViewModel()});UserInformationList.Add(new UserInfos(){Header = 3,UserName = "王五",EventAggregatorViewModel = new EventAggregatorViewModel()});}catch (Exception ex){MessageBox.Show($"{ex}");}

item刪除:這里通過前臺綁定事件實現

public void RemoveItem(object dataContext){var buttonContext = dataContext as SimpleButton;var item = buttonContext.DataContext as UserInfos;loginfo.Debug($"Enter [RemoveItem] Header = [{item.Header}]");UserInformationList.Remove(item);loginfo.Debug($"Leave [RemoveItem].");}

前臺XAML:這里標題和Item信息都通過模板實現

<dx:DXTabControl  ItemsSource="{Binding UserInformationList}"><dx:DXTabControl.ItemHeaderTemplate><DataTemplate><dxlc:LayoutItem Label="{Binding UserName}"><dx:SimpleButtonMargin="5,0,0,0"cal:Message.Attach="[Event Click] = [Action RemoveItem($source)]"Content="×" /></dxlc:LayoutItem></DataTemplate></dx:DXTabControl.ItemHeaderTemplate><dx:DXTabControl.ItemTemplate><DataTemplate><ContentControl  cal:View.Model="{Binding EventAggregatorViewModel}" /></DataTemplate></dx:DXTabControl.ItemTemplate></dx:DXTabControl>

效果演示

91d026186a11bfd3ca562ec9d6096655.gif

技術群:添加小編微信并備注進群

小編微信:mm1552923 ??

公眾號:dotNet編程大全? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286807.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2014 網選 上海賽區 hdu 5047 Sawtooth

題意&#xff1a;求n個M型的折線將一個平面分成的最多的面數&#xff01; 思路&#xff1a;我們都知道n條直線將一個平面分成的最多平面數是 An An-1 n1 也就是f(n) (n*n n 2)/2 對于一個M型的折線呢&#xff1f;它有四條線&#xff0c;但是由于三個頂點的關系導致劃分的平…

二、基礎(IVX快速開發手冊)

二、基礎 通過本節你將了解 iVX 所支持應用的創建方法。 文章目錄二、基礎2.1 iVX 線上集成環境進入2.2 創建項目2.3 選擇項目類型2.3.1 WebApp/小程序/原生應用2.3.2 微信小游戲2.3.3 微信小程序&#xff08;原生組件&#xff09;2.1 iVX 線上集成環境進入 點擊 連接 或通過…

【專升本計算機】經典Office 2003專升本復習題(Word、Excel、PowerPoint)

經典Office 2003專升本復習題(Word、Excel、PowerPoint) 一、Word 2003 1. 啟動 Word 是指: 將 Word 從硬盤中調入主存執行 2. 菜單欄: 文件( F )、編輯( E )、視圖( V )、插入( I )、格式( O )、工具( T )、表格( A )、窗口( W )、幫主( H ) 3. …

Android之TabLayout+ViewPager2+FragmentStateAdapter實現帶數字變化的TAB選項

1 問題 TabLayout+ViewPager2實現帶數字變化的TAB選項,然后左邊滑動或者點擊上面的Tab切換fragment不能刷新 2 結果爆照 3 代碼實現 layer_tab_indicator.xml <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="h…

slq2000數據庫升級到sql2012

看到標題&#xff0c;估計有同行笑了&#xff0c;這年代還有用sql2000的&#xff1f;真的有&#xff0c;最近單位服務器數據遷移升級&#xff0c;將數據庫遷移到新服務器后&#xff0c;發現數據全是2000的&#xff0c;無法直接導入到sql2012。沒辦法&#xff0c;只能先將數據庫…

電腦網頁打不開但qq能上解決方法

2019獨角獸企業重金招聘Python工程師標準>>> 問題描述&#xff1a; 電腦網頁打不開但qq能上。 問題原因&#xff1a; 是由于電腦系統的DNS解析出了問題。 解決方法&#xff1a; 首先在鍵盤上同時按下 winR 然后在彈窗中輸入cmd &#xff0c; 再按enter鍵&#xf…

【專升本計算機】計算機權威復習題(基礎知識、操作系統、計算機網絡)

一、計算機基礎知識 1. 第一臺計算機: ENIAC “埃尼阿克”, 1946 年 2 月 14 日 2. 信息社會的基礎是 計算機 、通信、信息的組織與處理,其中前者為核心 4. 計算機的組成: 運算器、控制器、存儲器、輸入設備、輸出設備 5. 隨機存儲器( RAM ): 可讀寫,寫…

基于Linux命令行KVM虛擬機的安裝配置與基本使用

背景由于生產環境的服務器并不會安裝桌面環境&#xff0c;簡單操作的圖形化安裝也不適合批量部署安裝。因此&#xff0c;我還是更傾向于在命令下安裝配置KVM虛擬機。結合了一些資料和個人使用的狀況&#xff0c;我大致列出了一些基本和常用的使用方法。 安裝配置一、環境介紹操…

四、WebApp 基礎可視組件(IVX 快速開發教程)

四、基礎可視組件 通過本節你將了解 iVX 開發中的核心—— iVX 組件的使用方法。iVX 的組件是開發應用時所必要的對象&#xff0c;通過這些對象你將快速的完成應用的開發。 在 iVX 應用開發中&#xff0c;所有交互、動畫、數據都需要以組件為基礎&#xff0c;通過組件之間的編…

Springboot項目搭建(三)整合thymeleaf模板

springboot整合thymeleaf模板 一、POM文件添加依賴 <!--thymeleaf--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency><!--nekohtml 解決thymea…

React-引領未來的用戶界面開發框架-讀書筆記(一)

這本書的主要內容都是以react v0.12為主&#xff0c;ES5語法&#xff0c;筆記中將會使用react v0.14和RS6。 第1章 react簡介 1.本質上是一個狀態機&#xff0c;它以精簡的模型管理復雜的隨著時間而變化的狀態。 2.它不是model-view-controller&#xff0c;它是mvc中的v(view)&…

Android之提示This version of Android Studio cannot open this project, please retry with Android Studio

1 問題 編譯項目&#xff0c;錯誤提示如下 This version of Android Studio cannot open this project, please retry with Android Studio 2 解決辦法 很明顯&#xff0c;看英語翻譯也知道&#xff0c;是由于AS版本太低導致&#xff0c;升級AS就可以了。

Netflix 的 API 架構演變歷程

Netflix 以其松耦合和高度可擴展的微服務架構而聞名&#xff0c;Netflix API 的后端架構經歷了 4 個主要階段。&#x1d40c;&#x1d428;&#x1d427;&#x1d428;&#x1d425;&#x1d422;&#x1d42d;&#x1d421; &#x1d40c;&#x1d428;&#x1d427;&#x1d…

五、Web App 基礎可視組件屬性(IVX 快速開發教程)

五、基礎可視組件屬性 在 iVX 中各個組件存在不同的屬性&#xff0c;這些屬性用于設置顯示的樣式或者是自身具備的特征等&#xff0c;通過更改這些屬性可以極大的方便我們進行項目的創作。 大多數組件都擁有相同的屬性&#xff0c;相同屬性在以下內容中不會贅述介紹&#xff…

【專升本計算機】甘肅省專升本考試計算機熱點考點(填空題115道)

甘肅專升本考試計算機填空題熱點考點 1 、自計算機問世至今已經經歷了四個時代,劃分時代的主要依據是計算機的構成元件。 2 、世界上第一臺電子數字計算機采用的邏輯元件是電子管。 3 、早期的計算機體積大、耗能高、速度慢,其主要原因是制約于元器件。 4 、當前的計算機一…

【回溯法】競賽游戲

題目描述 某游戲規則中&#xff0c;甲乙雙方戰斗&#xff0c;每一回合總能分出勝負&#xff0c;游戲規定&#xff1a; 1.失敗的一方要將自己體力值的1/4加給勝利的一方。 2.游戲開始時&#xff0c;甲的體力值是1000&#xff0c;乙的體力值是2000。 3.每一回合&#xff0c;甲乙勝…

zabbix自動發現(Discovery)功能使用

隨著監控主機不斷增多&#xff0c;有的時候需要添加一批機器&#xff0c;特別是剛用zabbix的童鞋 需要將公司的所有服務器添加到zabbix&#xff0c;如果使用傳統辦法去單個添加設備、分組、項目、圖像…..結果應該是讓人吐的結果。 鑒于這個問題我們可以好好利用下Zabbix大…

Apache之三種工作模式和配置性能優化

1 Apache的3種模式和版本 Apache目前一共有三種穩定的MPM&#xff08;Multi-Processing Module&#xff0c;多進程處理模塊&#xff09;模式&#xff0c;它們分別是prefork&#xff0c;worker和event。 我們可以使用httpd -V 命令查看apache的版本和模式&#xff0c;如果你服務…

lsof命令

lsof, LiSt Opened Files, 列出打開的文件, 聽起來很簡單的樣子. 但想*nix中很多其他工具一樣, lsof把這件簡單的事情做到了爐火純青. 因為Unix認為”一切皆文件”, 那么”打開的文件”就不僅僅是傳統意義上打開的文件了, 還可以是網絡/Unix域套接字, 匿名/具名管道, 共享庫文件…

React-引領未來的用戶界面開發框架-讀書筆記(二)

第4章 數據流 由于react的數據流向是單向的&#xff08;其父節點傳遞到子節點&#xff09;&#xff0c; 因此組件是簡單且易于把握的&#xff08;它們只需要從父節點獲取props渲染即可&#xff09; 假如頂層組件的某個prop改變了&#xff0c;react會遞歸地向下遍歷整個組件樹&a…