WPF DataGrid自動生成行號

2022-03-22 07:10:24 字數 2325 閱讀 9356

在使用wpf進行應用程式的開發時,經常會為datagrid生成行號,這裡主要介紹一下生成行號的方法。通常有三種方法,這裡主要介紹其中的兩種,另一種簡單提一下。

1. 直接在loadingrow事件中操作。

這種方式是在code behind檔案中操作。即相應的*.xaml.cs檔案。

**如下:

this.datagridsoftware.loadingrow += new eventhandler(this.datagridsoftware_loadingrow);     

//...

private

void datagridsoftware_loadingrow(object sender, datagridroweventargs e)

這種方式最為簡潔,也最容易理解。

但現在很多應用程式的開發都採用了mvvm(model-view-modelview)的開發模式。這種模式通常為了更好的解耦,所以通常不會在code behind檔案中加入**,為了在這種方式下實現上面的自動生成行號的操作,可以採用下面要講到第二種方法。但我個人認為,不能太死板的使用mvvm,對於生成行號這種需求,不是業務邏輯的範疇,而是view的範疇,所以放到code behind檔案中也可以。

2. 正如在第一種方法末尾提到的,為了適應mvvm的開發模式,不希望把自動生成行號的操作放到code behind檔案中去實現,而也是想放到viewmodel中去實現。這時候可以使用為事件繫結command的方法,具體做法見下面**:

xmlns:i="clr-namespace:system.windows.interactivity;assembly=system.windows.interactivity"  

為datagrid設定eventtrigger, commandparameter繫結datagrid本身,也就是將該datagrid作為command的引數。

<

datagrid 

x:name

="datagridallusers" ...

>

<

i:interaction.triggers

>

<

i:eventtrigger 

eventname

="loaded"

>

<

i:invokecommandaction 

command=""

commandparameter=""

>

i:invokecommandaction

>

i:eventtrigger

>

i:interaction.triggers

>

viewmodel中的**,datagridloadedcommand的實現:

private icommand datagridloadedcommand;

public icommand datagridloadedcommand

else

}///

/ rgister the loadingrow event.

datagrid.loadingrow += (sender, e) => ;

});}

return

this.datagridloadedcommand;}}

由於是loaded事件之後才註冊loadingrow事件,所以一開始載入的資料並沒有行號。所以想著是不是繫結其他的事件比較好呢,也沒有找到。如果你找到,歡迎分享。為了在載入好datagrid之後顯示行號,需要迴圈datagrid的所有行,然後修改datagridrow.header屬性,這就是command中那個foreach語句的作用。還有一點要注意的是,假如datagrid有很多資料,在可視範圍內沒有顯示完全(有滾動條),datagrid只載入可視範圍內的資料(items),其他資料在拖動滾動條要檢視時才載入,但其items集合屬性包含了所有item,所以foreach裡面多了個if語句來判斷,如果取到的datagridrow為空時,說明可視範圍內的行號已更新完畢,這時可以終止迴圈,註冊loadingrow事件即可。當其他items載入的時候就會自動觸發該事件改變行號了。

雖然這種方式可以實現自動生成行號的功能,但給人感覺也不爽,畢竟還是在viewmodel中操作具體控制項的。

3. 第三種方法是在為datagrid生成資料來源時,在集合中加一index列。在資料來源變更時也更新這一列,這種方式我沒試,覺得更麻煩。

最後,你可能會想,如果在第二種方法中,如果能夠把loadingrow事件的引數作為command的引數,那麼viewmodel中的command的實現就可以像第一種方法中一樣簡單了。下面有一篇關於mvvm中實現command繫結獲取事件引數eventargs的做法,可以參考:

WPF DataGrid自動生成序號

這裡在datagrid行級應用單值轉換器,獲取datagrid的行號 轉換為對應的序號,思路和實現非常簡單,核心 就幾行 binding binding converter converter public object convert object value,type targettype,ob...

WPF DataGrid自動生成行號

在使用wpf進行應用程式的開發時,經常會為datagrid生成行號,這裡主要介紹一下生成行號的方法。通常有三種方法,這裡主要介紹其中的兩種,另一種簡單提一下。1.直接在loadingrow事件中操作。這種方式是在code behind檔案中操作。即相應的 xaml.cs檔案。如下 this.data...

wpf DataGrid自動顯示行號

網上查了很多方法,基本都是自己寫乙個列,再用程式來填充這列的值為行號,太複雜了。其實有個簡單的思路就可以用3行 實現這個功能 當datagrid載入行時,將自身的索引值加 不就是行號了嗎?將這個值寫入表頭 行 就行了。datagrid.loadingrow new eventhandler data...