none
调用datagridcolumn的GetCellContent方法返回null RRS feed

  • 问题

  • RT, 因为需要动态修改datagridcomboboxcolumn每一行的comboxitem条目,所以我在对datagrid的itemssource赋值,然后循环调用datagridcolumn的GetCellContent方法,获取对应的ContentPresenter。
    现在问题是,datatable的rows的count数量超过10条后,调用datagridcolumn的GetCellContent方法有时候会返回null,求高手帮忙,谢谢!

    <DataGrid x:Name="listDataGrid" HorizontalAlignment="Left" Margin="0,36,0,0" VerticalAlignment="Top" Width="800" AutoGenerateColumns="False" IsReadOnly="True" Height="482">
                <DataGrid.Columns>
                    <DataGridTemplateColumn Header="模具" Width="*">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox Foreground="Black" x:Name="mouldComboBox" SelectedValuePath="mould_guid" 
                                          DisplayMemberPath="mould_serial_number"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
    

    for (int i = 0; i < listDataGrid.Items.Count; i++)
                {
                    ContentPresenter myContentPresenter = (ContentPresenter)listDataGrid.Columns[0].GetCellContent(
                            listDataGrid.Items[i]);        // datatable行数多的时候, myContentPresenter 可能会返回null
    
                    DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
                    ComboBox cb = (ComboBox)myDataTemplate.FindName("mouldComboBox", myContentPresenter);
    


    2014年9月12日 8:58

答案

  • 你好,

    >>现在问题是,datatable的rows的count数量超过10条后,调用datagridcolumn的GetCellContent方法有时候会返回null

    WPF DataGrid中的虚拟化是默认开启的,这样Item数量多的情况下,视图可见范围内的Item才真正加载,我们可以通过使用 VirtualizingPanel.IsVirtualizing 属性关闭虚拟化:

    #VirtualizingPanel.IsVirtualizing Attached Property
    http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingpanel.isvirtualizing(v=vs.110).aspx

    <DataGrid x:Name="listDataGrid" VirtualizingPanel.IsVirtualizing="False" AutoGenerateColumns="False" IsReadOnly="True" >

    这样就可以使用GetCellContent方法获取到所有Item的 ContentPresenter


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年9月15日 6:09
    版主