C# 对绑定源的更改未调用WPF DependencyProperty Property PropertyChangedCallback
当数据上下文中的属性发生更改时,绑定到数据上下文中属性的C# 对绑定源的更改未调用WPF DependencyProperty Property PropertyChangedCallback,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,当数据上下文中的属性发生更改时,绑定到数据上下文中属性的DependencyProperty未调用其PropertyChangedCallback 我已经设置了一个测试程序来探索这个功能,其中我有两个类;一个名为“DependencyObjectTest”,继承DependencyObject,另一个名为“ViewModelTest”,实现INotifyPropertyChanged DependencyObjectTest的代码如下: 公共类DependencyObjectTest:Depen
DependencyProperty
未调用其PropertyChangedCallback
我已经设置了一个测试程序来探索这个功能,其中我有两个类;一个名为“DependencyObjectTest”,继承DependencyObject
,另一个名为“ViewModelTest”,实现INotifyPropertyChanged
DependencyObjectTest
的代码如下:
公共类DependencyObjectTest:DependencyObject
{
公共静态只读DependencyProperty ValueProperty=DependencyProperty.Register(“值”,
typeof(双精度)、typeof(DependencyObjectTest)、new PropertyMetadata(0d,ValuePropertyChanged));
公共双重价值
{
获取{return(double)GetValue(ValueProperty);}
set{SetValue(ValueProperty,value);}
}
私有静态无效值PropertyChanged(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
如果(d是DependencyObjectTest测试(&e.NewValue是双值)
{
System.Diagnostics.Debugger.Break();
}
}
}
ViewModelTest
的代码如下:
公共类ViewModelTest:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
私有双值=0d;
公共双重价值
{
获取{返回值;}
设置
{
if(this.value!=值)
{
这个值=值;
NotifyPropertyChanged(名称(值));
}
}
}
私有void NotifyPropertyChanged(字符串propertyName)
{
PropertyChangedEventArgs e=新的PropertyChangedEventArgs(propertyName);
PropertyChanged?调用(this,e);
}
}
以下是如何在XAML中设置绑定:
然后,我有一个滑块,其值绑定到数据上下文的Value
。这将更新testObject
的值
属性,但不会触发PropertyChangedCallback
但是,当我在codebehind中手动设置绑定时,它会被触发
if(DataContext是ViewModelTest)
{
string propName=nameof(test.Value);
Binding Binding=新绑定(propName){Source=test};
如果(资源[“testObject”]是DependencyObjectTest depTest)
BindingOperations.SetBinding(depTest,DependencyObjectTest.ValueProperty,binding);
}
我的数据绑定设置中是否缺少某些内容?非常感谢您的帮助。尝试更改您的值绑定,例如Value=“{binding Value,Mode=TwoWay}”@Mike:
DependencyObjectTest
在定义为资源时不会继承DataContext
。您应该将其添加到可视化树中。您实际使用它做什么?@mm8在我的实际项目中,我有一个自定义控件,其中一个属性是一个抽象类,它实现了DependencyObject
。该类将被继承以处理如何加载自定义文档文件。控件的一个属性名为Source
,它可以通过网络等从硬盘加载,具体取决于Source
的设置。在我的项目中,我让自定义源类从文本字符串加载文档,并在Xaml中设置绑定,但当我更改文本字符串时,自定义源类中相应的文本属性不会更新。