MenuItem заставляет приложение работать медленно - PullRequest
1 голос
/ 25 февраля 2012

У меня есть DataGrid, который отображает мои данные (коллекция содержит более одного типа данных, где для каждого типа я написал DataTemplate). По сути, мой DataGrid действует как свойство Grid.

Обычно работа с сеткой данных выполняется довольно быстро. Каждый раз, когда я меняю коллекцию данных, она быстро загружается.

Моя проблема в том, что когда я отображаю какой-либо элемент menuItem (в contextmenu или Menu), это приводит к тому, что приложение неуклюже и работает медленно. Моя датагрид идет медленно.

Я уверен, что медлительность вызвана пунктом меню.

Это известная ошибка? Что я делаю неправильно? Кто-нибудь?

Вот код DataGrid

  <DataGrid Name="propsDataGrid" Grid.Row="0" AutoGenerateColumns="False" Background="#FFA9BFD4" RowBackground="#FFCADBE7"
              VirtualizingStackPanel.IsVirtualizing="True" ItemsSource="{Binding Properties}">
        <DataGrid.Columns>
      <!--<DataGridTextColumn  Header="Name" IsReadOnly="true"   Width="100" MinWidth="22"  Binding="{Binding DisplayName,Converter={StaticResource propertyNameToDiplayNameConverter}}" />-->
            <DataGridTemplateColumn Header="Name" IsReadOnly="true"   Width="100" MinWidth="22" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Grid>
                            <Border  Background="#FFA9BFD4" 
                                     Visibility="{Binding IsCategoryItem,Converter={StaticResource boolToVisibilityConverter}}"> 
                                <Expander Template="{StaticResource SimpleExpanderTemp}"  ExpandDirection="Left" 
                                     IsExpanded="{Binding IsExpanded, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Margin="3,0,5,0"/>
                            </Border>
                            <TextBlock   Text="{Binding DisplayName,Converter={StaticResource propertyNameToDiplayNameConverter}}"/>
                                        <!--Visibility="{Binding IsCategoryItem,Converter={StaticResource boolToVisibilityConverter},ConverterParameter=VisForFalse}"/>-->
                        </Grid>
                     </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Property" IsReadOnly="true"   Width="1*" MinWidth="22" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ContentControl Background="#FFA9BFD4"  Content="{Binding Converter={StaticResource uiPropertyViewModelToObjConverter}}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

        </DataGrid.Columns>
    </DataGrid>

Вот код пункта меню:

  <Menu  Background="Transparent">
        <MenuItem Header="File">
            <MenuItem Header="New"  Command="{Binding Source={x:Static ns:ApplicationCommands.NewProject}}"/>
            <MenuItem Header="Load"  Command="{Binding Source={x:Static ns:ApplicationCommands.LoadProject}}"/>
            <MenuItem Header="Add scene" Command="{Binding Source={x:Static ns:ApplicationCommands.AddScene}}"/>
            <MenuItem Header="Export" Command="{Binding Source={x:Static ns:ApplicationCommands.ExportProject}}"/>
            <!--<MenuItem Header="Import" Command="{Binding Source={x:Static ns:ApplicationCommands.ImportProject}}"/>-->
            <MenuItem Header="Save" Command="{Binding Source={x:Static ns:ApplicationCommands.SaveProject}}"/>
            <MenuItem Header="Save as" Command="{Binding Source={x:Static ns:ApplicationCommands.SaveAsProject}}"/>
            <ns:RecentFileList x:Name="RecentFileList"/>
            <MenuItem Header="Exit" Command="{Binding Source={x:Static ns:ApplicationCommands.Exit}}"/>
        </MenuItem><!--File-->

...