1

У меня есть два DataGrid s, и у меня есть синхронная прокрутка на месте (прокрутка по одной сетке вызывает прокрутку других). Одна из решеток имеет DataGridTemplateColumn с DataTemplate установлен в Image:WPF: Синхронная прокрутка становится вялой для двух DataGrids, одна из которых имеет столбец изображения со связыванием

<DataGridTemplateColumn Width="16"> 
    <DataGridTemplateColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <EventSetter Event="PreviewMouseLeftButtonDown" Handler="CommentIcon_Clicked" /> 
     </Style> 
    </DataGridTemplateColumn.CellStyle> 

    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Source="{Binding Blank, Mode=TwoWay}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

После данных связан с сетками, прокрутка становится очень вялым и медленным. Поэтому я подозреваю его операцию привязки свойства Source, которая вызывает медлительность каждый раз, когда прокрутка происходит, потому что если я установил привязку к StaticResource, тогда прокрутка станет гладкой. Есть ли способ исправить это?

Обновление Проблема связана с ошибками привязки к источнику Image. Значение свойства, которое связывается с Image источником является пустая строка:

var d2 = (from l in t.Item2 
      select new ProgramLine { Blank = String.Emtpty, Line = l}).ToList(); 
dataGrid2.ItemsSource = d2; 

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

Урок Как Стивен говорит, убедитесь, что нет никаких обязательных ошибок

Совет Используйте открывшееся окно при запуске приложения WPF в режиме отладки

+1

Вы пробовали настройку виртуализации на ваши DataGrids? –

+0

Также [Загрузка изображения на фоне] (http://stackoverflow.com/q/16035300/1456174) может вам помочь. –

ответ

3

Look для связывания ошибок в VS. Также вы можете использовать это прикрепленное свойство непосредственно на вашей привязке к источнику изображения: diagnostics:PresentationTraceSources.TraceLevel=High Диагностика пространства имен находится здесь: xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" После этого вы можете найти еще больше информации о своей привязке снова в окне вывода. К сожалению, ошибки привязки способны к HUGE производительности. Поэтому старайтесь полностью их устранять, когда работаете над любым WPF-приложением.

Btw вам не нужно связывать TwoWay, потому что Image контроль просто не может изменить значение свойства обратно. Его управляет OneWay, который просто принимает заданное значение.

EDIT: Есть несколько советов по производительности управления WPF DataGrid вы можете использовать link

+0

Я просто использовал непосредственное окно (в первый раз), чтобы добавить некоторые элементы в свой список во время выполнения и увидеть эти ошибки привязки. После этого я пришел сюда, чтобы проверить, нет ли ответа. После прочтения вашего ответа и ошибок привязки, теперь я знаю, в чем проблема! Спасибо. – badmaash