2012-06-11 3 views
1

У меня есть usercontrol, и когда у меня есть много этого в окне, загрузка занимает много времени. Будет ли улучшаться, если я изменю его на customcontrol или, возможно, DataTemplate с классом и вложенными свойствами? любые идеи были бы весьма признательны.Как улучшить производительность пользовательского контроля wpf?

Отредактировано:

это мой контроль:.

<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> 

и некоторый код в код (и фактически все другие управления имеет такое же поведение)

+0

Пожалуйста, покажите нам xaml и код или объясните, что замедляет его. –

+0

@Erno: я добавил код выше. Спасибо. –

ответ

1

Первое, не используйте DynamicResource использование StaticResource -

использование

ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle1}" 

вместо

ColumnHeaderStyle="{DynamicResource DataGridColumnHeaderStyle1}" 

Вторая вещь, чтобы проверить наличие ошибок привязки в окне Output, попытаться исправить столько, сколько вы можете.

Кроме того, я не вижу никакой пользы от использования CollectionViewSource (поскольку вы не выполняете сортировку, фильтрацию, группировку); Если нет необходимости использовать CollectionViewSource, вы можете напрямую связать DataGridItemSource с DataCollection.Source.

+0

@ akjoshi: спасибо за ваше предупреждение о staticresource, но я изменил usercontrol на customcontrol, и есть так много различий между ними! –

+0

@raha: yes UserControl и CustomControl предназначены для разных целей, и их реализация сильно отличается. – akjoshi

Смежные вопросы