title: Binding a CustomControl DependencyProperty to a ViewModel enum
body: <p>I'm attempting to create a CustomControl which will have <strong>various</strong> properties affected by an enum found in a ViewModel. The CustomControl created will be called within a View.</p>
  
  <p>I would like the enum binding to change a couple of things within the Control, these include:</p>
  
  <ul>
  <li>Changing an Images source (images changed to are static within a folder created inside the CustomControl Library),</li>
  <li>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)).</li>
  </ul>
  
  <p>Keep in mind, these two DP's will be linked e.g. if bound enum is case x, the image source will change <strong>and</strong> the displayed text. 
  Basically, the two exposed DP's here will be bound to the <strong>same enum</strong>, but use it differently.</p>
  
  <hr>
  
  <p>So, my <strong>question</strong> is, what would be the best way to carry what is described above?</p>
  
  <p>I've already thought about two possible ways: </p>
  
  <ol>
  <li>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,</li>
  <li>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?</li>
  </ol>
  
  <p>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. </p>
  
  <p>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?</p>
  
  <p>Also, I am not limited to doing it the two ways described, if you feel there is a better way, please suggest it!</p>
  
  <p>I am using WPF (C#) in conjunction with MVVM architecture (MVVM Light Toolkit).</p>
  
  <p>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!</p>
  
  <p>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!</p>