title: Silverlight 3 user control data Binding in xaml
body: <p>I’m trying to achieve something that is conceptually quite simple but can’t seem to get it working.</p>
  
  <p>I have a class called c1 it has 2 dependency properties in it an integer I and a string S. It implements INotifiyPropertyChanged.</p>
  
  <pre><code>public class c1: INotifyPropertyChanged 
  {
      private int i;
      public int I { get { return i; } set { i = value; if(PropertyChanged != null) PropertyChanged(this,new PropertyChangedEventArgs("I")); } }
      private string s;
      public string S { get { return s; } set { s = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("S")); } }
  
      #region INotifyPropertyChanged Members
  
      public event PropertyChangedEventHandler PropertyChanged;
  
      #endregion
  }
  </code></pre>
  
  <p>This class is referenced by a Silverlight user control SUC that also implements INotifiyPropertyChanged as a dependency property C, with a PropertyChangedCallback etc. As seen below.</p>
  
  <pre><code>public partial class SUC : UserControl, INotifyPropertyChanged
  {
  
      public c1 C
      {
          get { return (c1)GetValue(CProperty); }
          set { SetValue(CProperty, value); }
      }
      public static readonly DependencyProperty CProperty =
          DependencyProperty.Register("C", typeof(c1), typeof(SUC), new PropertyMetadata(new c1(), new PropertyChangedCallback(c1Changed)));
  
  
      private static void c1Changed(DependencyObject obj, DependencyPropertyChangedEventArgs e)
      {
          SUC s = obj as SUC;
          if (s != null)
              s.CChanged((c1)e.NewValue);
      }
  
      public void CChanged(c1 c)
      {
          C = c;
          if(PropertyChanged!=null)
              PropertyChanged(this,new PropertyChangedEventArgs("C"));
      }
      public SUC()
      {
          InitializeComponent();
          this.DataContext = this;
      }
  
      private void bclick(object sender, RoutedEventArgs e)
      {
          C.S = C.S + " Clicked";
          MessageBox.Show(C.I.ToString() + " - " + C.S);
      }
      public event PropertyChangedEventHandler PropertyChanged;
  }
  </code></pre>
  
  <p>In my main page which also implements INotifiyPropertyChanged I have an instance of c1 and of SUC. </p>
  
  <pre><code>public partial class MainPage : UserControl, INotifyPropertyChanged
  {
  
  
      public c1 MC
      {
          get { return (c1)GetValue(MCProperty); }
          set { SetValue(MCProperty, value); }
      }
  
      public static readonly DependencyProperty MCProperty =
          DependencyProperty.Register("MC", typeof(c1), typeof(MainPage), new PropertyMetadata(new c1()));
  
  
      private static void MCChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
      {
          MainPage mp = d as MainPage;
          if (mp != null)
              mp.MCChanged();
      }
  
      public void MCChanged()
      {
          if (PropertyChanged != null)
              PropertyChanged(this, new PropertyChangedEventArgs("MC"));
      }
  
      public MainPage()
      {
          InitializeComponent();
          MC.S = "ssss";
          this.DataContext = this;
      }
  
  
      public event PropertyChangedEventHandler PropertyChanged;
  </code></pre>
  
  <p>}</p>
  
  <p>I want to set the C property of the SUC user control via XAML. Like so</p>
  
  <p>local:SUC x:Name="suc" C="{Binding MC, Mode=TwoWay}"</p>
  
  <p>This works well in the c# code behind but not in XAML. The reason I need it in XAML is because I want to bind a collection of c1’s to SUC’s in a DataTemplate.</p>
  
  <p>Any working examples with downloadable code would be most appreciated.</p>