我有一个名为ChartView的UserControl . 我有一个ObservableCollection类型的属性 . 我在ChartView中实现了INotifyPropertyChanged .
ChartEntry的代码是:
public class ChartEntry
{
public string Description { get; set; }
public DateTime Date { get; set; }
public double Amount { get; set; }
}
现在我想在另一个View中使用此Control,并通过DataBinding为ChartEntries设置ObservableCollection . 如果我试着这样做:
<charts:ChartView ChartEntries="{Binding ChartEntriesSource}"/>
我在xaml窗口中收到一条消息,我无法绑定到非依赖项属性或非依赖项对象 .
我试图将ObservableCollection注册为DependencyProperty,但没有成功 . 我用WPF Tutorial的代码试了一下
我的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?
2 回答
你似乎在
AttachedProperty
和DependencyProperty
之间有些困惑 . 忘记你的ChartEntriesSource
类......相反,将这个DependencyProperty
添加到你的ChartView
控件应该可以解决问题:你这里不需要
AttachedProperty
. 在你的ChartView
中添加DependencyProperty
之类的现在您可以绑定ChartEntries属性: