Ik heb ergens in mijn (fictieve) project een mutable class die een event triggert als er iets verandert:
En verderop ergens in mijn WPF-applicatie een UserControl met een DependencyProperty:
Dit had geweldig gewerkt als 'Configuration' immutable was geweest en ik iedere keer een nieuwe waarde aan de DependencyProperty had toegewezen, maar helaas. Ik zoek een manier om de DependencyProperty op het 'Changed' event uit 'Configuration' te laten reageren (een nieuwe render laten triggeren, volgens FrameworkPropertyMetadataOptions.AffectsRender). Nou kan ik zelf natuurlijk een PropertyChangedCallback aan de DependencyProperty hangen en me handmatig aanmelden voor 'Configuration.Changed' en dan een InvalidateRender() aanroepen bij iedere trigger, maar dat lijkt me geen mooie oplossing.
Is dit voorzien in WPF?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| public delegate void ChangedEventHandler(object sender, EventArgs e); public class Configuration { private string name; public string Name { set { this.name = value; OnChanged(); } get { return this.name; } } public event ChangedEventHandler Changed; protected void OnChanged() { if (this.Changed != null) this.Changed(this, EventArgs.Empty); } } |
En verderop ergens in mijn WPF-applicatie een UserControl met een DependencyProperty:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public class MyControl : UserControl { public static readonly DependencyProperty ConfigurationProperty = DependencyProperty.Register("Configuration", typeof(Configuration), typeof(MyControl), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender)); public Configuration Configuration { get { return GetValue(ConfigurationProperty) as Configuration; } set { SetValue(ConfigurationProperty, value); } } protected override void OnRender(DrawingContext drawingContext) { // Render something with data from Configuration } } |
Dit had geweldig gewerkt als 'Configuration' immutable was geweest en ik iedere keer een nieuwe waarde aan de DependencyProperty had toegewezen, maar helaas. Ik zoek een manier om de DependencyProperty op het 'Changed' event uit 'Configuration' te laten reageren (een nieuwe render laten triggeren, volgens FrameworkPropertyMetadataOptions.AffectsRender). Nou kan ik zelf natuurlijk een PropertyChangedCallback aan de DependencyProperty hangen en me handmatig aanmelden voor 'Configuration.Changed' en dan een InvalidateRender() aanroepen bij iedere trigger, maar dat lijkt me geen mooie oplossing.
Is dit voorzien in WPF?
Ehhh wat?