I'm attempting to create a CustomControl which will have various properties affected by an enum found in a ViewModel. The CustomControl created will be called within a View.
I would like the enum binding to change a couple of things within the Control, these include:
- Changing an Images source (images changed to are static within a folder created inside the CustomControl Library),
- Alter a TextBlocks Text property, again, the text options will be static between one of X amount of cases (X being the number of possible enum states(also doesn't change)).
Keep in mind, these two DP's will be linked e.g. if bound enum is case x, the image source will change and the displayed text. Basically, the two exposed DP's here will be bound to the same enum, but use it differently.
So, my question is, what would be the best way to carry what is described above?
I've already thought about two possible ways:
- Expose useful DP types and bind these properties to the same enum (e.g Property1="{Binding someEnum}" Property2="{Binding someEnum}") and also provide a ValueConvertor to convert these enums to useful types which the CustomControl can then use,
- Or, expose a single DP which accepts an enum and then changes the properties somewhere else within the CustomControl code, depending on the value of the bound enum?
I am fairly comfortable with carrying out option 1 with a value convertor in the Views code-behind file. However, I would like to avoid doing it this way as it would make the control less independant.
Regarding option two, I'm not entirely sure how to do it this way so articles or a small explanation would help if you feel this is the way to go - Possibly implementing INoitifyPropertyChanged on the DP so the control knows it's value has been changed when the Bound enum changes?
Also, I am not limited to doing it the two ways described, if you feel there is a better way, please suggest it!
I am using WPF (C#) in conjunction with MVVM architecture (MVVM Light Toolkit).
Quick Note: I would like to avoid altering the ViewModel - The exposed enum and all logic there should remain as it is unless absoloutely necessary!
Thanks in advance for your replies and I will attempt to update this question as much as possible with responses and updates regarding personal progress with the issue as well as possible extra information which has been requested!