Registrar propiedad como propiedad de dependencia

Tengo un UserControl llamado ChartView. Allí tengo una propiedad de tipo ObservableCollection. He implementado INotifyPropertyChanged en el ChartView.

El código para un ChartEntry es:

public class ChartEntry { public string Description { get; set; } public DateTime Date { get; set; } public double Amount { get; set; } } 

Ahora quiero usar este control en otra vista y configurar la colección Observable para ChartEntries a través de DataBinding. Si bash hacerlo solo con:

  

Recibo un mensaje en la ventana xaml que no puedo enlazar a una propiedad de no dependencia o un objeto de no dependencia.

Intenté registrar ObservableCollection como DependencyProperty, pero sin éxito. Lo probé con el código de WPF Tutorial.

Mi código para la propiedad adjunta es

  public static class ChartEntriesSource { public static readonly DependencyProperty ChartEntriesSourceProperty = DependencyProperty.Register("ChartEntriesSource", typeof(ChartEntry), typeof(ChartView), new FrameworkPropertyMetadata(OnChartEntriesChanged)); private static void OnChartEntriesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { } public static void SetChartEntriesSource(ChartView chartView, ChartEntry chartEntries) { chartView.SetValue(ChartEntriesSourceProperty, chartEntries); } public static ChartEntry GetChartEntriesSource(ChartView chartView) { return (ChartEntry)chartView.GetValue(ChartEntriesSourceProperty); } } 

Esto tampoco funcionó. ¿Cómo registro mi propiedad como una propiedad de dependencia?

Parece estar algo confundido entre una AttachedProperty y una DependencyProperty . Olvídese de su clase ChartEntriesSource … en su lugar, agregar esta ChartView DependencyProperty en su control ChartView debería hacer el truco:

 public static readonly DependencyProperty ChartEntriesProperty = DependencyProperty. Register("ChartEntries", typeof(ObservableCollection), typeof(ChartView)); public ObservableCollection ChartEntries { get { return (ObservableCollection)GetValue(ChartEntriesProperty); } set { SetValue(ChartEntriesProperty, value); } } 

Usted no necesita AttachedProperty aquí. En su ChartView agregue la ChartView DependencyProperty como

  public static readonly DependencyProperty ChartEntriesProperty = DependencyProperty.Register("ChartEntries", typeof(ObservableCollection), typeof(ChartView), new FrameworkPropertyMetadata(OnChartEntriesChanged)); private static void OnChartEntriesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { } 

Ahora puedes enlazar tu propiedad ChartEntries: