Kos
Kos

Reputation: 72319

WPF UserControl pre-configuration

I'm designing an user control and I'd like to make its behaviour configurable - but just once, when it's created. I don't need it to adapt later on, since I know beforehand that a specific window will to use it with a specific configuration.

Consider this simple markup:

<MyControl SomeProperty="True" SomeOtherProperty="12345" />

SomeProperty and SomeOtherProperty are DependencyProperties declared in my codebehind.

The issue is: The control does some preprocessing of its input data in its constructor, before InitializeComponent() is called. On that stage, I don't have the access to SomeProperty or SomeOtherProperty defined by the user - they still have the default values.

After that, if these properties are set in the XAML, they're assigned the values after the constructor. I can respond to them by introducing a PropertyChangedCallback and performing the calculations over again after each property is updated.

This is sub-optimal since I just want to pass the values once and make sure that the control's initialization logic is only ran once too - already with correct settings. The solution with PropertyChangedCallbacks requires me to make this control more complex, i.e. responsive to any changes to these dependency properties during the control's whole lifetime. This is much more than I need - it would be satisfactory for my properties to be read-only and set only once at the moment of control creation.

How can I manage to do that while keeping the XAML markup clean?

Upvotes: 3

Views: 324

Answers (1)

Reed Copsey
Reed Copsey

Reputation: 564861

Your control must be constructed in order for WPF to set the properties - there is no way to "delay" the construction until after the properties are set.

Instead of putting your initialization logic in the constructor, you might want to try putting it elsewhere, such as subscribing to the Loaded event and initializing there. This will happen after the properties are set.

Upvotes: 2

Related Questions