[.Net碼農][WPF] ListView 中 View 的模板替換(新增/刪除列)
=====================================================
今天在網上閒逛,突然發現這邊文章竟然被人毫不尊重原作者權益而胡亂轉載,讓人氣憤。
本著知識共享的目的,歡迎大家轉載,但是轉載請保留本文的原始連結,謝謝!
本文原作者:YuanHui
=====================================================
在WPF中使用ListView,往往需要根據情況隱藏或顯示ListView的某一列,我們當然可以通過程式碼來對付它(利用VisualTreeHelper.GetChild(listView)來得到某一個Column,然後隱藏它),但是,既然使用了WPF,我們就要入鄉隨俗,使用模板來處理。其實模板是個好東西,他提供了非常便利的定製機制,你可以把任意可視元素定義的面目全非——當然如果你願意
為了增減ListView的Column,我們只需定義多個GridView資源,在執行時根據不同情況使用不同資源,就可以達到增減Column的目的。這裡其實都算不上是真正的模板替換。
本文附帶原始碼可以在這裡下載到:TestListViewColumnCustom.rar
下面就開始吧!
老規矩,拖出VS2008,Create new project->WPF Application,名字就叫TestListViewColumnCustom吧,我一貫以“Test”開頭命名工程,這樣表明這是一個測試專案,是對ListViewColumnCustom所做的測試工程。點選OK後進入Window1.xaml
圖1 介面
Xaml程式碼如下:
<Window x:Class="TestListViewColumnCustom.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
Title="Window1" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="42"/>
<RowDefinition Height="32"/>
<RowDefinition/>
<RowDefinition Height="60"/>
</Grid.RowDefinitions>
<Label Margin="5" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" Foreground="Maroon">List View Column Custom</Label>
<CheckBox Margin="5" Grid.Row="1" Grid.Column="0" Click="CheckBox_Click" VerticalAlignment="Center">Hide Last Column</CheckBox>
<ListView Name="listView1" Margin="5" Grid.Row="2" Grid.Column="0">
<ListView.View>
<GridView>
<GridViewColumn Header="Name"></GridViewColumn>
<GridViewColumn Header="A" Width="60"></GridViewColumn>
<GridViewColumn Header="B" Width="60"></GridViewColumn>
<GridViewColumn Header="WillBeHiden"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<StackPanel Margin="5" Grid.Row="3" Grid.Column="0">
<Label Foreground="Maroon">Author:He,YuanHui</Label>
<Label Foreground="Maroon">Date: 2008.7.10</Label>
</StackPanel>
</Grid>
</Window>
給ListView新增兩個(任意多個)GridView資源,擁有不同的Columns:
<Window.Resources>
<GridView x:Key="haveHidnColumn">
<GridViewColumn Header="Name"></GridViewColumn>
<GridViewColumn Header="A" Width="60"></GridViewColumn>
<GridViewColumn Header="B" Width="60"></GridViewColumn>
<GridViewColumn Header="WillBeHiden"></GridViewColumn>
</GridView>
<GridView x:Key="haveNoHidnColumn">
<GridViewColumn Header="Name"></GridViewColumn>
<GridViewColumn Header="A" Width="60"></GridViewColumn>
<GridViewColumn Header="B" Width="60"></GridViewColumn>
</GridView>
</Window.Resources>
為CheckBox新增Click處理事件:
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
// select different template
CheckBox checkBox = sender as CheckBox;
if (checkBox.IsChecked == true)
{
this.listView1.View = this.Resources["haveNoHidnColumn"] as GridView;
}
else
{
this.listView1.View = this.Resources["haveHidnColumn"] as GridView;
}
// rebinding data
this.listView1.ItemsSource = null;
this.listView1.ItemsSource = dataList;
}
執行,點選CheckBox,可以發現最後一列可以動態“刪除”:
圖2 WillBeHiden列將被刪除
勾選CheckBox:
圖3 WillBeHiden列被刪除
為了顯得更加真實,上面綁定了資料:
public Window1()
{
InitializeComponent();
// init data
for (int i = 0; i < 5; i++)
{
dataList.Add(new Data());
dataList[i].Name = "data" + (i + 1).ToString();
dataList[i].A = 1.0 + i / 10.0;
dataList[i].B = 2.0 + i / 10.0;
}
this.listView1.ItemsSource = dataList;
}
簡單總結一下:思想就是,在資源中定義具有不同Column的資源,根據程式需要,為ListView繫結不同GridView,達到動態修改ListView的列的目的。
注意,由於資料繫結的關係,替換模板後需要重新繫結一下資料:
// rebinding data
this.listView1.ItemsSource = null;
this.listView1.ItemsSource = dataList;
相關推薦
[.Net碼農][WPF] ListView 中 View 的模板替換(新增/刪除列)
===================================================== 今天在網上閒逛,突然發現這邊文章竟然被人毫不尊重原作者權益而胡亂轉載,讓人氣憤。 本著知識共享的目的,歡迎大家轉載,但是轉載請保留本文的原始連結,謝謝! 本文原作者:YuanHui =====
【.Net碼農】C#中的partial class(部分類)
C# 2.0 可以將類、結構或介面的定義拆分到兩個或多個原始檔中,在類宣告前新增partial關鍵字即可。 例如:下面的PartialTest類 class PartialTest { string Str_FieldTest; int Int_FieldTes
android自定義View之自定義EditText(新增刪除功能)
忙忙碌碌20天,新的專案終於接近尾聲了。今天公司召集幾個使用者體驗師和美工一起吐糟這20天做的這個新產品,對於產品提出了很多建議,這幾天就改介面了。在這個專案中大量的使用了EditText元件,並且添加了刪除功能。這裡面都是用RelativeLayou
【.Net碼農】WPF介面設計—擼大師
WPF介面設計,模仿了金山衛士,360,魯大師的介面! <!--無邊框窗體--> <Stylex:Key="NoResize_window"TargetType="{x:Type Window}"> <Set
[.Net碼農]分享非常漂亮的WPF介面框架原始碼及外掛化實現原理
在上文《分享一個非常漂亮的WPF介面框架》中我簡單的介紹了一個介面框架,有朋友已經指出了,這個介面框架是基於ModernUI來實現的,在該文我將分享所有的原始碼,並詳細描述如何基於ModernUI來構造一個非常通用的、外掛化的WPF開發框架。下載原始碼的同志,希望點選一下推薦。 本文將按照以下四點來介紹:
【.Net碼農】初試T4模板
工具下載地址:【二選一 個人喜歡用 devart T4 Editor for Visual Studio 小巧 有些朋友 從網上下載外掛後 開啟專案 還是顯示純黑字型 沒有著色 和提示功能,但新建專案 和 新建模板 又正常解答【把你的老專案 升級上來
【.Net碼農】.NET中執行js指令碼的方法
一、後臺註冊js指令碼 在專案開發中,遇到了問題,當使用了UpdatePanel控制元件後,直接在後臺輸出js指令碼報錯了。 大家都知道向客戶端輸出內容的方式很多,而大多數初學者會使用Respone.Write(string)。比如: 以下是程式碼片段:
【.Net碼農】C#.net檔案批量上傳解決方案附下載(swfupload)2015-8-28更新
因為最近專案需要多檔案同時上傳所以自己在網上找了下方法。swfupload做到了,所以我把我的C#.net環境的多檔案同時上傳共享給大家!(本例項最大隻能上傳500M的資料,如需要上傳更大的下面會告訴大家如何設定) 功能完全支援ie和firefox瀏覽器! 一般的WEB方式檔案上傳只能一個一個的進行上傳
【.Net碼農】WebBrowser與IE的關係,如何設定WebBrowser工作在IE9模式下?
一.問題的提出 偶然發現,Winform裡的WebBrowser和IE實際安裝的版本似乎並不同步,很有趣! 下面有張圖,裡面一個視窗是用IE9開啟某網站,另一個視窗是用Winform+WebBrowser開啟同樣的網站,有意思的事情出現了。 在IE9視窗中,這個網站左邊選單樹無法顯示,原因是IE9使用
【.Net碼農】修改WebBrowser控制元件的核心解決方案
首先說一下原理 當下很大瀏覽器他們都是用了IE的core, 這個core只提供HTML/JS的執行和渲染,並沒有給出關於介面和一些特性上的事,所以開發自己瀏覽器如果基於IE core需要自己完成這些內容。 一張圖很好的說明了這個情況,IE瀏覽器的架構:http://msdn.microsoft.com/e
【.Net碼農】C# 啟動EXE檔案及帶啟動引數EXE
(一)、先製作一個帶啟動引數的EXE檔案。 步驟: 1、定義全域性私有變數:private string[] s = new string[1]; //這裡為了簡單起見,只做一個引數 2、 在窗體的建構
【.Net碼農】ABP學習目錄傳送門
https://aspnetboilerplate.com/Pages/Documents/Zero/Startup-Template入門教程http://www.cnblogs.com/mienreal/p/4528470.htmlhttps://www.cnblogs.c
【.Net碼農】DataGrid 資料繫結使用小結一
做過ASP.NET開發的朋友都知道,ASP.NET提供了強大的列表資料控制元件,從ASP.NET1.1 時代的DataGrid,到ASP.NET2.0時代的GridView,再到ASP.NET3.5時代的ListView,功能越 來越強大,使用起來也非常的靈活.在Silverlight2中,同樣提供了一
[.Net碼農].net呼叫外部exe檔案
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text
【.Net碼農】C#反射獲取 所有欄位 及 私有欄位
using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace ReflectionDemo {
【.Net碼農】【NPOI】NPOI對Excel的操作(Sheet轉DataTable、List)
通過NPOI對Excel進行操作,這裡主要是讀取的操作。封裝到ExcelHelper操作類中。 using System.Collections.Generic; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.U
【.Net碼農】在 Web 窗體上報表檢視器 Web 控制元件需要 System.Web.UI.ScriptManager
異常詳細資訊: Microsoft.Reporting.WebForms.ScriptManagerNotFoundException: 在 Web 窗體上報表檢視器 Web 控制元件需要 System.Web.UI.ScriptManager。 源錯誤: [沒有相
[.Net碼農]MVC——入門+最簡單的小例項
MVC全名是Model View Controller,是模型(model)-檢視(view)-控制器(controler)的縮寫,一種軟體設計典範,用於組織程式碼用一種業務邏輯和資料顯示分離的方法。 1.最上面直接面向用戶的"檢視層"(View)。它是提供
【.Net碼農】用asp.net實現遠端獲取其他網站頁面指定內容
遠端獲取網頁內容.經過一定的處理和靈活應用,可以開發成成體系網站內容採集系統.通常也叫做"新聞小偷"一般來說.做內容採集分為如下幾個大致的步驟: 1.遠端獲取頁面的全部Html源文字. 2.通過過濾處理,分析有效內容文字.(通常用正則表示式來擷取有效資料) 3.將格式有效的資料,根據自己的資料庫結
【.Net碼農】【MVC】多層架構+MVC+EF+AUTOFAC+AUTOMAPPER
1 namespace YTJWGL_EFDao 2 { 3 public class BaseEFDao<T> : IBaseDao<T> where T : class,new()//限制T的型別為class或者物件 4 { 5 6