1. 程式人生 > >WPF 通過行為在xaml上控制itemscontrol(listbox,listview等)的排序分組

WPF 通過行為在xaml上控制itemscontrol(listbox,listview等)的排序分組

1.在專案中新增itemscontrol排序的類(可同時對多個條件進行分組排序)

備註:類引用的名稱空間

using System.Windows.Controls;
using System.Windows.Interactivity;
using System.ComponentModel;
using System.Windows.Data;

    /// <summary>
    /// 實現ItemsControl(如ListBox)的排序與分組
    /// </summary>
    public class SortAndGroupBehavior : Behavior<ItemsControl>
    {
        
/// <summary> /// 排序的屬性 /// </summary> public string SortProperty { get; set; } /// <summary> /// 分組的屬性 /// </summary> public string GroupProperty { get; set; } protected override void OnAttached() { base.OnAttached();
if (!string.IsNullOrEmpty(this.SortProperty)) { var list = this.SortProperty.Split(','); for (int ii = 0; ii < list.Length; ii++) { var str = list[ii]; if (string.IsNullOrEmpty(str)) {
continue; } bool asc = true; if (str.EndsWith(" asc", StringComparison.OrdinalIgnoreCase)) { str = str.Substring(0, str.Length - 4); } else if (str.EndsWith(" desc", StringComparison.OrdinalIgnoreCase)) { str = str.Substring(0, str.Length - 5); asc = false; } this.AssociatedObject.Items.SortDescriptions.Add(new SortDescription(str, (asc ? ListSortDirection.Ascending : ListSortDirection.Descending))); } } if (!string.IsNullOrEmpty(this.GroupProperty)) { var list = this.GroupProperty.Split(','); for (int ii = 0; ii < list.Length; ii++) { var str = list[ii]; if (string.IsNullOrEmpty(str)) { continue; } this.AssociatedObject.Items.GroupDescriptions.Add(new PropertyGroupDescription(str)); } } } protected override void OnDetaching() { base.OnDetaching(); this.AssociatedObject.Items.SortDescriptions.Clear(); this.AssociatedObject.Items.GroupDescriptions.Clear(); } }

2.在xaml進行呼叫,使用listview作為例子

         <ListView Margin="5" ItemsSource="{Binding PeopleList}">
            <i:Interaction.Behaviors>
                <local:SortAndGroupBehavior SortProperty="Age desc"/>
            </i:Interaction.Behaviors>
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="國籍" Width="150" DisplayMemberBinding="{Binding Nation}" />
                    <GridViewColumn Header="城市" Width="150" DisplayMemberBinding="{Binding City}" />
                    <GridViewColumn Header="姓名" Width="150" DisplayMemberBinding="{Binding Name}" />
                    <GridViewColumn Header="年齡" Width="150" DisplayMemberBinding="{Binding Age}" />
                </GridView>
            </ListView.View>
        </ListView>            

3.排序效果(根據年齡進行降序排列)

相關推薦

WPF 通過行為xaml控制itemscontrol(listbox,listview)的排序分組

1.在專案中新增itemscontrol排序的類(可同時對多個條件進行分組排序) 備註:類引用的名稱空間 using System.Windows.Controls;using System.Windows.Interactivity;using System.ComponentModel;using Sys

WPF ItemsControl ListBox ListView比較

原文: WPF ItemsControl ListBox ListView比較 在進行列表資訊展示時,WPF中提供多種列表可供選擇。這篇部落格將對WPF ItemsControl, ListBox, ListView進行比較。 相同點: 1. 這三個控制元件都是列表型控制元件,可以進行列表繫結(Item

WPF 通過行為將事件繫結到命令

dll:Microsoft.Expression.Interactions.dll         System.Windows.Interactivity.dll <Window         xmlns="http://schemas.microsoft.c

android 音樂播放 啟動方式 (3)服務通過傳送廣播來控制activity顯示進度

播放列表存放在裡application中,這個地方可以優化 1 PlayService中:播放路徑從intent中獲取 @Override public void onCreate() { super.onCreate(); mPlayer = ne

WPF通過附加屬性控制視窗關閉

原文: WPF通過附加屬性控制視窗關閉 場景1 當使用 ShowDialog() 方式顯示視窗時,通過定義附加屬性的方式可實現在 ViewModel 中進行資料繫結(bool?)來控制子視窗的顯示和關閉 public class ExWindow { public static b

WPFWPF通過RelativeSource繫結父控制元件的屬性

原文: 【WPF】WPF通過RelativeSource繫結父控制元件的屬性 1.後臺程式碼實現繫結父控制元件的屬性 RelativeSource rs = new RelativeSource(RelativeSourceMode.FindAncestor); //設定為離自己控制元件最近的

C#進階 WPF基礎一 XAML控制元件基礎、佈局

一、控制元件模型 WPF的控制元件與WinForm類似。區別在於WPF的控制元件可以用XAML手寫,並且功能更多更強大 二、XAML語言 1、概念:在WPF中用來描述控制元件的語言. 特點: 與XML、HTML語言類似,但對大小寫敏感 一個XAML標籤代表NEW一個控制元件

WPF通過委託跨頁面修改介面控制元件,並傳值原理完全解析

網上有很多講WPF修改控制元件的,但是大部分都只是程式碼佔據了很大的篇幅,沒有詳細講解過程。所以有了我這篇文章。我希望每一個看到這篇文章的朋友都可以看懂,另外不要被太長的標題嚇到。 通過委託跨頁面修改控制元件,所謂的原理就是,構造一個可以觸發事件A的靜態類,然後對頁面做出

WPF中的Canvas實現控制元件的拖動、縮放

   如題,專案中需要實現使用滑鼠拖動、縮放一個矩形框,WPF中沒有現成的,那就自己造一個輪子:)    造輪子前先看看Windows自帶的畫圖工具中是怎樣做的,如下圖:      在被拖動的矩形框四周有9個小框,可以從不同方向拖動來放大縮小矩形框,另外需要注意的是,還有一

Cubieboard使用U-boot通過定時器中斷控制LED

繼LED之後,學習使用A10中斷,目的是學習U-boot中如何使用中斷。 軟體環境: 筆記本一臺,安裝WindowsXP sp3                      XP下軟體:Source Insight 3.5;SecureCRT;VMware Worksta

《遊戲腳本的設計與開發》-(RPG部分)3.8 通過腳本來自由控制遊戲(一)

pan tro prototype chan detail 大致 位置 trim dir 註意:本系列教程為長篇連載無底洞。半路殺進來的朋友,假設看不懂的話。請從第一章開始看起。文章文件夾請點擊以下鏈接。http://blog.csdn.net/lufy_legend/a

[寒江孤葉丶的Cocos2d-x之旅_33]RichTextEx一款通過HTML標簽控制文字樣式的富文本控件

ast number blink js版本號 領取 size 創建 sub require RichTextEx一款通過HTML標簽控制文字樣式的富文本控件 原創文章,歡迎轉載。轉載請註明:文章來自[寒江孤葉丶的Cocos2d-x之旅系列] 博客地址

查看WPF 應用程序XAML結構DOM樹

pla soft spec 代碼 ant es2017 ext 設置斷點 ins 當我們看到一些設計新穎的網站時,可以借助瀏覽器自帶的Inspector 工具或插件方便的瀏覽網站布局結構及邏輯。如果是WPF 應用程序能否看到控件的架構方式呢?本篇將介紹兩款工具Snoop 和

CSS 如何通過top left 定位控制div在另一個div的位置

src 技術 charset .com utf erb 效果 width left 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type"

通過命令行傳代碼到GitHub

圖片 rep git倉庫 hub down 就是 http blog img 自工作以來,本人第一次使用GitHub。下面是將本地的項目上傳到GitHub的過程。上傳代碼的前提是:1.已註冊GitHub賬號;2.本地已安裝Git。 第一步:遠程Git倉庫 進入本地的項目的根

通過fromdata實現傳文件

php.ini echo XML als size itl 數據 tmp clas 其實呢,文件上傳的插件很多,可是現在做的東西要求盡量少用插件,所以就自己寫了一下。 之前也用node寫過對文件處理方面的東西,這次用php寫著試一下。 a.html文件 <!DOCT

AWS S3日誌文件通過服務器傳到elk

AWS S3 日誌 文件 通過elk查看s3產生的大量日誌首先理清思路首先從s3上用s3cmd命令將logs同步下來 再將日誌寫到文件 再通過elk展示出來一、安裝s3cmd命令 S3cmd工具的安裝與簡單使用: 參考文檔https://www.cnbl

Unity —— 通過鼠標點擊控制物體移動

技術 aps this lap sep CA sha pub mon 1 //ClickMove - - 通過鼠標點擊控制物體移動 2 3 using System.Collections; 4 using System.Collections.Generic

阿裏雲內網機器通過squids代理訪問外網資源

transform url accep iss time eval connect 目錄 mas 一、背景 代理服務器A(10.0.1.2)機器有公網地址可正常訪問外網 業務服務器B(10.0.1.33)機器無公網地址不能訪問外網 代理服務器A((10.0.1.2)和業務服

通過event事件來控制紅綠燈通行車輛

art pen pytho 就是 random 文件中 結束 但是 初始 事件的初始值為False,所以最開始就是紅燈,先模擬紅綠燈的規律,設定為每兩秒變換一次燈,然後再模擬車輛通行,通過事件來將兩者的事件結合起來, 當事件為False時,為紅燈,車輛處於等待狀態,一直wa