[英]WPF DataGrid Binding and CheckBox
我有一個基本的問題:
假設我有某個類的元素列表。 而且我還有一個DataGrid,可以顯示此列表項的屬性。 我希望用戶通過額外的復選框列(實際上是datagridtemplatecolumn)選擇一些項目。 然后他按下按鈕,某些功能僅處理選定的項目。 我應該如何實現此復選框的邏輯?
我應該在類中添加一個布爾屬性並將其綁定到復選框列嗎? (我認為,僅出於UI的目的向我的核心類添加額外的屬性是不好的)
我應該制作一些具有布爾屬性的包裝器類,然后將DataGrid綁定到包裝器類的列表嗎? (比第一個變體更好地遵循OOP規則)
制作一個未綁定的復選框列。 然后在循環之前檢查循環中的datagrid行以收集選定的項。 (這是我想做的,但是未綁定的復選框列的行為確實很奇怪:當我切換一個復選框時,也會切換其他兩個復選框。而且我也沒有找到一種方法來瀏覽DataGrid的所有行)。
您的變體...
我想根據OOP規則進行操作。 這是主要要求。 這就是為什么我不能接受第一個變體的原因,除非您對我說這沒問題並且經常使用。
我投票支持#2; 它與MVVM模式融合在一起,我認為這是在WPF中進行直接開發的唯一方法。 這樣,您將創建一個視圖模型類,該類將包裝您的域對象以處理復選框與更改屬性等之間的通信,同時觸發PropertyChanged事件並保持UI處於最新狀態。
伙計們,我只是嘗試這種解決方案,並且效果很好,也許不是最好的方法,但是它確實有效。
bool? valor = false;
foreach (var d in DetalleFactura.Items)
{
DataGridRow row = (DataGridRow)DetalleFactura.ItemContainerGenerator.ContainerFromItem(d);
if (DetalleFactura.Columns[0].GetCellContent(row) is CheckBox)
{
valor = ((CheckBox)DetalleFactura.Columns[0].GetCellContent(row)).IsChecked;
}
}
我們一直在同一個困境中掙扎,最終選擇了向IsSelected
類添加布爾屬性的選項#1,為什么? 真正歸結為:
當然,這可能違反了某些黃金MVVM規則,但有時規則被打破了。
*我不記得Josh提供的確切示例,但是您可以在他的一篇博客文章中看到他的用法: 綁定到分組的ICollectionView時的初始選擇項
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.