簡體   English   中英

如何訪問WPF DataGrid中的控件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM