[英]How do I access the controls in a WPF DataGrid
在WinForms的舊版本中(好!),datagrids行曾經是實際的控件,然后您可以訪問DataItem。
在WPF中,所有翻轉的內容和dataGrid.Items只是源數據。
我可能會像WPF newb那樣以錯誤的方式進行處理,但是如何在gridview的行中進行迭代以獲取某些標簽,文本框等的值呢?
是的,您這樣做的方向是錯誤的。 您應該做的是遍歷數據源中的項目-畢竟這是所有值所在的位置。
可以遍歷WPF對象,但這並不簡單。 如果嘗試嘗試,則會遇到一個重大問題。
您可以使用VisualTreeHelper
類搜索可視樹並找到DataGrid
的后代對象。 如果玩了這么長時間,最終您將弄清楚如何找到想要的特定控件。 但是, DataGrid
(實際上是其控制模板中的VirtualizingStackPanel
)可以虛擬化其可視子級。 如果項目尚未出現在屏幕上,則尚未創建其WPF對象,並且您不會在可視樹中找到它們。 您可能無法找到所需的內容,不是因為您沒有找到它的方法,而是因為它不存在。
如果您在綁定中使用值轉換器和格式設置(這是我能想到的,您想查看WPF對象而不是基礎數據項的唯一原因),恐怕答案是:不要不要那樣做。 在數據源中進行值轉換和格式設置,並將結果顯示為可以直接綁定的屬性。
當然可以在不使用MVVM模式的情況下使用WPF。 但這是您可能碰到的那種磚牆。
你可以用這個
public DataGridRow TryFindRow(object item, DataGrid grid)
{
// Does not de-virtualize cells
DataGridRow row = (DataGridRow)(grid as ItemsControl).ItemContainerGenerator.ContainerFromItem(item);
return row;
}
其中item代表該行上顯示的數據。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.