Если вы когда-нибудь получали сообщение об ошибке с текстом:
A 'Binding' cannot be set on the 'Geometry' property of type 'ConnectionByLine'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
То уже знаете, что решение проблемы элементарно до безобразия, хотя некоторые, такие как я, всё же упускают детали.
Чаще всего это возникает, когда название свойства (в примере - Geometry) не соответствует регистрируемому свойству: DependencyProperty.Register("Geometry", ...);
Обычно DependencyProperty имеет следующий вид:
public static readonly DependencyProperty GeometryProperty = DependencyProperty.Register("Geometry", typeof(PathGeometry), typeof(BaseShape));
public PathGeometry Geometry
{
get { return (PathGeometry)GetValue(GeometryProperty); }
set { SetValue(GeometryProperty, value); }
}
После этого можно производить привязку к данному свойству следующим образом в XAML-коде:
...
Label
Content="{Binding ElementName=MyLine, Path=Geometry}"
...
Но помните, если вы примените какое-нибудь послабление в именовании свойств, то получите ошибку с сообщением о том, что привязку можно производить только на зависимые свойства.
Читать дальше......
Показаны сообщения с ярлыком Binding. Показать все сообщения
Показаны сообщения с ярлыком Binding. Показать все сообщения
понедельник, 6 июля 2009 г.
вторник, 23 июня 2009 г.
DataGrid. Неверное отображение привязанных элементов после прокрутки.
Предусловия:
WPF, DataGrid, Binding.
Вы используете DataGrid, ячейки таблицы меняют свои состояния динамически, и привязаны к неким свойствам посредством Binding.
Симптомы:
При скролировании строк DataGrid'а, состояния некоторых свойств отображаются неверно.
Решение:
Чтобы решить проблему достаточно переключить свойство VirtualizingStackPanel.VirtualizationMode на значение "Standard".
Что при этом происходит?
VirtualizingStackPanel используется, как видно из названия, для виртуализации объектов, в нашем случае, DataGrid. Т.е. когда вы смещаете видимую область таблицы, строки, которые не отображаются виртуализируются с целью экономии. Но и тут есть особенности - одно дело виртуализировать объект, другое - его состояния.
Значение свойства "Standard" отключает виртуализацию. Это приводит к тому, что все объекты таблицы хранятся в памяти целиком. Минусы: память расходуется не оптимально, плюсы: не требуется восстанавливать и виртуализировать объекты, и как следствие - работа с объектами происходит быстрее.
Listing...
DataGrid
Style="{StaticResource DataGridStyle}"
MaxWidth="500"
MaxHeight="500"
SelectionMode="Single"
SelectionUnit="FullRow"
Loaded="MainGrid_Loaded"
VirtualizingStackPanel.VirtualizationMode="Standard"
Читать дальше......
WPF, DataGrid, Binding.
Вы используете DataGrid, ячейки таблицы меняют свои состояния динамически, и привязаны к неким свойствам посредством Binding.
Симптомы:
При скролировании строк DataGrid'а, состояния некоторых свойств отображаются неверно.
Решение:
Чтобы решить проблему достаточно переключить свойство VirtualizingStackPanel.VirtualizationMode на значение "Standard".
Что при этом происходит?
VirtualizingStackPanel используется, как видно из названия, для виртуализации объектов, в нашем случае, DataGrid. Т.е. когда вы смещаете видимую область таблицы, строки, которые не отображаются виртуализируются с целью экономии. Но и тут есть особенности - одно дело виртуализировать объект, другое - его состояния.
Значение свойства "Standard" отключает виртуализацию. Это приводит к тому, что все объекты таблицы хранятся в памяти целиком. Минусы: память расходуется не оптимально, плюсы: не требуется восстанавливать и виртуализировать объекты, и как следствие - работа с объектами происходит быстрее.
Listing...
DataGrid
Style="{StaticResource DataGridStyle}"
MaxWidth="500"
MaxHeight="500"
SelectionMode="Single"
SelectionUnit="FullRow"
Loaded="MainGrid_Loaded"
VirtualizingStackPanel.VirtualizationMode="Standard"
Читать дальше......
Подписаться на:
Сообщения (Atom)
