Похоже, у вас есть DependencyProperty, который представляет собой набор точек в вашем UserControl. При регистрации используйте метаданные FrameworkPropertyMetadata
и укажите FrameworkPropertyMetadataOptions.AffectsRender
в конструкторе метаданных. Обратите внимание, что это будет работать только в том случае, если будет заменена вся коллекция (если вы вызовете PropertyChanged для коллекции, но экземпляр коллекции не изменился, ваша краска все равно не будет вызвана).
Если ваша коллекция реализует INotifyCollectionChanged
, то вы можете подключить обработчик события, измененного коллекцией, который делает недействительным визуальный элемент:
public static DependencyProperty PointsProperty = DependencyProperty.Register(
"Points",
typeof(IEnumerable<Point>),
typeof(UC1),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.AffectsRender,
OnPointsChanged));
public IEnumerable<Point> Points
{
get { return (IEnumerable<Point>)GetValue(PointsProperty); }
set { SetValue(PointsProperty, value); }
}
private static void OnPointsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
UC1 ctrl = d as UC1;
if (e.NewValue != null && e.NewValue is INotifyCollectionChanged)
((INotifyCollectionChanged)e.NewValue).CollectionChanged += ctrl.PointsChanged;
if (e.OldValue != null && e.OldValue is INotifyCollectionChanged)
((INotifyCollectionChanged)e.OldValue).CollectionChanged -= ctrl.PointsChanged;
}
private void PointsChanged(object sender, NotifyCollectionChangedEventArgs e)
{
InvalidateVisual();
}