C# 未调用WPF DependencyProperty属性ChangedCallback
我的问题是我的C# 未调用WPF DependencyProperty属性ChangedCallback,c#,wpf,xaml,data-binding,dependency-properties,C#,Wpf,Xaml,Data Binding,Dependency Properties,我的问题是我的OnMatrixPropertyChanged方法从未被调用。绑定到同一属性的标签会更新,因此我知道绑定正在矩阵属性上进行 我有一个UserControl,我想在其中添加一个dependencProperty,以便将其绑定到。我的主窗口如下所示: <Window.DataContext> <local:MainWindowViewModel /> </Window.DataContext> <StackPanel>
OnMatrixPropertyChanged
方法从未被调用。绑定到同一属性的标签会更新,因此我知道绑定正在矩阵属性上进行
我有一个UserControl
,我想在其中添加一个dependencProperty
,以便将其绑定到。我的主窗口如下所示:
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<StackPanel>
<Button
Command="{Binding LoadMatrixCommand}"
Content="Load"
Width="150">
</Button>
<Label
Content="{Binding Matrix.Title}">
</Label>
<controls:MatrixView
Matrix="{Binding Path=Matrix, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</controls:MatrixView>
</StackPanel>
我一定错过了一些很明显的东西
编辑#1:查看模型
public class MatrixViewModel : ViewModelBase
{
public MatrixViewModel()
{
}
}
public class MainWindowViewModel : ViewModelBase
{
private IMatrixService _matrixService;
private Matrix _matrix;
public Matrix Matrix
{
get => _matrix;
set
{
_matrix = value;
base.RaisePropertyChanged();
}
}
public ICommand LoadMatrixCommand { get; private set; }
public MainWindowViewModel()
{
LoadMatrixCommand = new RelayCommand(LoadMatrix);
_matrixService = new MatrixService();
}
private void LoadMatrix()
{
var matrixResult = _matrixService.Get(1);
if (matrixResult.Ok)
{
Matrix = matrixResult.Value;
}
}
}
当然有类似的东西
<UserControl.DataContext>
<local:MatrixViewModel/>
</UserControl.DataContext>
在UserControl的XAML中。删除它,因为它可以防止像
<controls:MatrixView Matrix="{Binding Matrix}" />
在正确的视图模型实例(即从主窗口继承的实例)中查找矩阵属性
具有可绑定(即依赖)属性的用户控件不应设置自己的DataContext,因为这样做会破坏这些属性的任何基于DataContext的绑定。@Christopher我没有绑定列表。矩阵是单个对象(包含子对象)。我要么错过了一些愚蠢的东西,要么我完全误解了DPs!在“调试输出”视图中是否看到任何绑定错误?视图模型看起来如何?当您将标签内容绑定到
Matrix.Title
时,这是否有效?矩阵类是什么样子的?确定您没有将其与框架的矩阵结构混淆?@Clemens标签的内容会按预期更新。我将更新代码示例以提供更多的上下文@dymanoid一条线索<代码>System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“MatrixViewModel”(HashCode=8274172)“上找不到“矩阵”属性。绑定表达式:路径=矩阵;DataItem='MatrixViewModel'(HashCode=8274172);目标元素为“MatrixView”(名称=“”);目标属性为“矩阵”(类型为“矩阵”)这是答案。。。但我不确定我是否理解为什么。我显然不懂DPs!我认为用户控件的代码隐藏中的dependency属性将由其父控件绑定。如果我为UserControl指定DataContext,该UserControl上的任何DPs是否会自动尝试绑定到指定DataContext上的匹配属性?这不是dependency属性,而是绑定。如果未显式指定绑定的源、RelativeSource或ElementName,它将在绑定的目标对象的当前DataContext中查找Source属性。DataContext的值从父元素传递到子元素,例如从主窗口传递到MatrixView。除非您通过在UserControl中显式设置DataContext来覆盖它。
<controls:MatrixView Matrix="{Binding Matrix}" />