3

ChartViewというUserControlがあります。ObservableCollection 型のプロパティがあります。ChartView に INotifyPropertyChanged を実装しました。

ChartEntry のコードは次のとおりです。

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

ここで、このコントロールを別のビューで使用し、DataBinding を介して ChartEntries の ObservableCollection を設定したいと考えています。私がそれをやろうとすると:

<charts:ChartView ChartEntries="{Binding ChartEntriesSource}"/>

非依存プロパティまたは非依存オブジェクトにバインドできないというメッセージが xaml ウィンドウに表示されます。

ObservableCollection を DependencyProperty として登録しようとしましたが、成功しませんでした。WPFチュートリアルのコードで試してみました

Attached-Property の私のコードは

 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);
        }
    }

これもうまくいきませんでした。プロパティを DependencyProperty として登録するにはどうすればよいですか?

4

2 に答える 2

4

AttachedPropertyと の間で混乱しているようですDependencyProperty。クラスのことは忘れてくださいChartEntriesSource...代わりに、これDependencyPropertyChartViewコントロールに追加するとうまくいくはずです:

public static readonly DependencyProperty ChartEntriesProperty = DependencyProperty.
Register("ChartEntries", typeof(ObservableCollection<ChartEntry>), typeof(ChartView));

public ObservableCollection<ChartEntry> ChartEntries
{
    get { return (ObservableCollection<ChartEntry>)GetValue(ChartEntriesProperty); }
    set { SetValue(ChartEntriesProperty, value); }
}
于 2013-10-23T12:53:26.683 に答える
3

ここは必要ありませんAttachedProperty。あなたのようなものをChartView追加してくださいDependencyProperty

    public static readonly DependencyProperty ChartEntriesProperty =
        DependencyProperty.Register("ChartEntries",
                                            typeof(ObservableCollection<ChartEntry>),
                                            typeof(ChartView),
                                            new FrameworkPropertyMetadata(OnChartEntriesChanged));

    private static void OnChartEntriesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {

    }

ChartEntries プロパティをバインドできるようになりました。

 <charts:ChartView ChartEntries="{Binding PROPERTYOFYOURDATACONTEXT}"/>
于 2013-10-23T12:51:52.163 に答える