2012-06-11 3 views
1

J'ai un usercontrol, et quand j'en ai beaucoup dans une fenêtre, il faut du temps pour être chargé. Est-ce que ça ira mieux si je le change en un customcontrol ou peut-être un DataTemplate avec une classe et des propriétés attachées? des idées seraient grandement appréciées.Comment améliorer les performances du contrôle utilisateur wpf?

Modifié:

ceci est mon contrôle.

<UserControl 
    x:Class="Pouyansoft.WPF.MVVM.Control.Common.View.DataGridSelectorControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    x:Name="dataGridSelector" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    mc:Ignorable="d" > 
<UserControl.Resources> 
    <CollectionViewSource Source="{Binding DataCollection.Source}" x:Key="theSource"/> 
    <Style x:Key="DataGridColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 
        <Grid VerticalAlignment="Center" HorizontalAlignment="Stretch"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="*"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <TextBlock Grid.Row="0" Text="{TemplateBinding Content}" 
            HorizontalAlignment="Center" /> 
         <TextBox x:Name="txtSearch" Grid.Row="1" HorizontalAlignment="Stretch" 
           BorderThickness="1" TextChanged="TextBox_TextChanged" /> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 

<Grid>  
    <DataGrid x:Name="grd" 
      ItemsSource="{Binding Source={StaticResource theSource}}" 
      AutoGenerateColumns="False" 
      ColumnHeaderStyle="{DynamicResource DataGridColumnHeaderStyle1}" 
      PreviewKeyDown="grd_PreviewKeyDown" 
      SelectedIndex="{Binding SelectedIndex}" 
      behavior:MouseDoubleClick.Command="{Binding MouseDoubleClickCommand}" 
      PreviewMouseLeftButtonUp="grid1_PreviewMouseLeftButtonUp" 
      GridLinesVisibility="Vertical"> 
    </DataGrid> 
</Grid> 

et un code dans le code derrière (et en fait tout autre contrôle a le même comportement)

+0

Veuillez nous montrer le code xaml et le code ou expliquer ce qui le ralentit. –

+0

@Erno: j'ai ajouté le code ci-dessus.Merci. –

Répondre

1

Première chose, ne pas utiliser DynamicResource utiliser StaticResource -

utilisation

ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle1}" 

à la place de

ColumnHeaderStyle="{DynamicResource DataGridColumnHeaderStyle1}" 

La deuxième chose est de vérifier les erreurs de liaison dans la fenêtre de sortie, essayer de corriger autant que vous le pouvez.

En outre, je ne vois aucun avantage à utiliser CollectionViewSource (comme vous ne faites aucun tri, filtrage, regroupement); S'il n'est pas nécessaire d'utiliser CollectionViewSource, vous pouvez directement lier le ItemSource de DataGrid à votre DataCollection.Source.

+0

@ akjoshi: merci pour votre avertissement à propos de staticresource, mais j'ai changé usercontrol en customcontrol, et il y a tellement de différence entre eux !! –

+0

@raha: yes UserControl et CustomControl sont des outils différents et leurs implémentations sont très différentes. – akjoshi

Questions connexes