【发布时间】:2012-10-16 07:02:34
【问题描述】:
我制作了一个用户控件,并在其中定义了一个依赖属性,如下所示:
public static readonly
DependencyProperty SourceProperty =
DependencyProperty.Register(
"Source",
typeof( ObservableCollection<object> ),
typeof( SingleLineChart ),
new PropertyMetadata(
default( ObservableCollection<object> ),
lineAffectedPropertyChanged ) );
我也有一个普通的属性,它包裹了上面的那个。在它的 setter 中,我只调用 SetValue( SourceProperty, value ); 方法。
当我从代码隐藏文件中设置Source 时,lineAffectedPropertyChanged 被调用并执行,一切正常;但是当我使用简单的数据绑定时,什么也没有发生。
<Line:SingleLineChart
Name="bestFitnessDisplayer"
Source="{Binding Path=bestFitnessHistory}"
Margin="20"/>
我错过了什么?
【问题讨论】:
-
您是否遇到任何绑定错误?也许路径 bestFitnessHistory 没有找到
-
同意杰霍夫的观点。可能绑定有问题。 bestFitnessHistory位于哪里?根据您的命名风格,我怀疑它在内部视图中。但是你的绑定需要这个集合在绑定的 DataContext 中。
-
另外备注:通常使用集合的默认值是不好的做法 DependencyProperties:如果这样做,类的所有对象将使用相同的集合对象作为默认值,基本上共享相同的项目。但这可能与您的问题无关。
-
不!没有绑定错误,我在父节点设置了正确的数据上下文
-
什么是 bestFitnessHistory?它是一个字段/属性吗?并且您是否通知 SingleLineChart 每当您以某种方式创建/修改/填充此属性/字段时?或者它是一个依赖属性?我认为这里的问题是您没有在数据上下文的构造函数中分配/创建 bestFitnessHistory,但有时稍后(如果它是 CLR 属性)您需要告诉视图它已更改。
标签: c# wpf data-binding dependency-properties