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}" />