Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对绑定源的更改未调用WPF DependencyProperty Property PropertyChangedCallback_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

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中设置绑定,但当我更改文本字符串时,自定义源类中相应的文本属性不会更新。