MahApps.Metro TabControl Laggy,带有填充的GridView

时间:2012-11-14 11:44:32

标签: wpf data-binding telerik lag mahapps.metro

我有一个包含4个TabItem的TabControl。在每个TabItem里面,我有一个GridView和一个工具栏。 我使用MahApps.Metro(用于Window和TabControl)和telerik RadControls(用于GridView和Toolbar)。 我使用MahApps.Metro TabControl和AnimatedSingleRowTabControl,所以每次切换标签时都会有一个标签更改动画。

当GridView为空时,动画是平滑的,但是当GridView填充数据时,它就会滞后。 每次切换标签时,它总是滞后1-2秒左右。 我的表只有最多73行。所以,我不认为加载太多了。

我不知道这是不是因为我没有使用正确的方法将GridView与Table绑定或其他原因。

我想平滑动画,所以我的解决方案是:

  • 在切换制表符时让GridView为空,并在幻灯片动画后填充它。

  • 以某种方式使动画流畅(改变装订方式)。

但是,我不知道如何完成上述选项:P 有人可以帮帮我吗? 另一个解决方案是受欢迎的。

这是我的代码:

    <TabControl SelectionChanged="TabControl_SelectionChanged">
       <TabItem Name="Tab_Collection" 
                Header="Collection" 
                Style="{StaticResource MetroTabItem}">
           <StackPanel Margin="20,10">
               <telerik:RadToolBar telerik:StyleManager.Theme="Metro" 
                                   Margin="0,0,0,5"
                                   Width="338"
                                   GripVisibility="Collapsed"
                                   OverflowButtonVisibility="Collapsed"
                                   HorizontalAlignment="Right">
                    <Button Name="Btn_CollectionAdd"
                            Width="80"
                            Height="25"
                            Content="Add"/>
                    <Button Name="Btn_CollectionEdit"
                            Width="80" 
                            Height="25"
                            Content="Edit"/>
                    <Button Name="Btn_CollectionDelete"
                            Width="80" 
                            Height="25"
                            Content="Delete"/>

                    <telerik:RadToolBarSeparator/>

                    <Button Name="Btn_CollectionSearch"
                            Width="80" 
                            Height="25"
                            Content="Search"
                            Click="Btn_Search_Click"/>
                </telerik:RadToolBar>

             <telerik:RadGridView Name="Dgv_Collection" telerik:StyleManager.Theme="Metro"
                                  Margin="0,0,0,10"
                                  Height="505"
                                  BorderBrush="#25A0DA"
                                  BorderThickness="1"
                                  SelectionUnit="FullRow"
                                  AutoGenerateColumns="False"
                                  CanUserInsertRows="False"
                                  CanUserDeleteRows="False" 
                                  CanUserResizeRows="False"
                                  CanUserFreezeColumns="False"
                                  CanUserSortColumns="False"
                                  CanUserResizeColumns="False"
                                  CanUserReorderColumns="False"
                                  ShowGroupPanel="False"
                                  RowIndicatorVisibility="Collapsed"
                                  EditTriggers="None">
                    <telerik:RadGridView.Columns>
                        <telerik:GridViewDataColumn Width="30" 
                                                    Header="#" 
                                                    IsFilterable="False" 
                                                    DataMemberBinding="{Binding id}"/>

                        <telerik:GridViewDataColumn Width="*" 
                                                    Header="Title" 
                                                    IsFilterable="False" 
                                                    DataMemberBinding="{Binding title}"/>
                    </telerik:RadGridView.Columns>
                </telerik:RadGridView>
            </StackPanel>
        </TabItem>

    //I do the same for the rest 3 TabItems

    </TabControl>

我以这种方式绑定GridView:

    private void loadCollection()
    {
       String conn = connection_string;
       String sql = null;

       try
       {
          sql = "SELECT * FROM Tbl_Information";
          SqlCeDataAdapter dataAdapter = new SqlCeDataAdapter(sql, conn);
          SqlCeCommandBuilder commandBuilder = new SqlCeCommandBuilder(dataAdapter);

          DataTable table = new DataTable();
          dataAdapter.Fill(table);
          Dgv_Collection.ItemsSource = table;
       }
       catch (SqlCeException ex)
       {
          MessageBox.Show(ex.Message);
       }

    }

    //load the rest 3 table the same way

    public MainPage()
    {
       InitializeComponent();
       loadCollection();

       //call the rest
    }

注意:我还是WPF的新手:)

编辑: 我发现它首次访问TabItem时只会滞后。如果我单击一个TabItem然后切换到另一个Tab它是滞后的。但是,当我切换回上一个标签时,它的动画效果很流畅。

1 个答案:

答案 0 :(得分:0)

不要将Gridview放在Tabcontrol中,否则你必须使用&#34; persistant&#34; TabControl