c# - 为什么 WPF Binding 不调用 PropertyMetadata 中定义的 propertyChangedCallback,而代码隐藏中的 setter 调用?

标签 c# wpf data-binding dependency-properties

我制作了一个用户控件,并在其中定义了一个依赖属性,如下所示:

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 被调用并执行,一切正常;但是当我使用简单的数据绑定(bind)时,什么也没有发生。

        <Line:SingleLineChart
        Name="bestFitnessDisplayer"
        Source="{Binding Path=bestFitnessHistory}"
        Margin="20"/>

我错过了什么?

最佳答案

我知道已经晚了。 我想绑定(bind)属性的泛型类型不是对象类型。 .Net 无法在 ObservableCollection<object> 的类型之间进行转换和 ObservableCollection<Something> .最好创建不带泛型参数的 IEnumerabe/ICollection 或 IList 类型的 DependencyProperty。

关于c# - 为什么 WPF Binding 不调用 PropertyMetadata 中定义的 propertyChangedCallback,而代码隐藏中的 setter 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12909173/

相关文章:

c# - 将异步/等待与结果混合

c# - 找不到路径的一部分 :While copying file on Mapped drive using Windows Service

c# - 如何在 XAML 中设置 DataGrid 的 ItemsSource?

c# - 从其他窗口刷新组合框列表,MVVM

c# - 如何在Azure Function C#中获取文件夹路径

wpf - MVVM 层次结构中的更改通知

wpf - MVVM-应该将动态生成和加载XAML的代码放在哪里?

c# - WPF MVVM 复选框停止命令在数据绑定(bind)上触发

c# - 带有用于搜索的文本框的 DataTemplate

c# - 是否可以通过 HTTP 或 FTP 协议(protocol)而不是 TCP/IP 传输数据流