C# WPF-嵌套ViewModels的BindingExpression路径错误

C# WPF-嵌套ViewModels的BindingExpression路径错误,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我知道这场争论有不同的话题,但我仍然找不到解决办法。 具体问题如下: 我编写了几个WPF用户控件。每个UserControl都有自己的ViewModel。Xaml视图放置在单独的Xaml模板主题文件夹中 有一个特殊的控件承载一些自定义UserControl。下面是一个场景 SpecialControl.xaml 其中MyTextProperty在ControlA ViewModel中定义 当我运行应用程序时,所有功能都正常工作,但在输出日志中,我可以看到如下内容: System.Windows.

我知道这场争论有不同的话题,但我仍然找不到解决办法。 具体问题如下:

我编写了几个WPF用户控件。每个UserControl都有自己的ViewModel。Xaml视图放置在单独的Xaml模板主题文件夹中

有一个特殊的控件承载一些自定义UserControl。下面是一个场景

SpecialControl.xaml

其中MyTextProperty在ControlA ViewModel中定义

当我运行应用程序时,所有功能都正常工作,但在输出日志中,我可以看到如下内容:

System.Windows.Data Error: 40 : BindingExpression path error: 'MyTextProperty ' property not found on 'object' ''SpecialControlViewModel' (HashCode=8043914)'. BindingExpression:Path=DataContext.MyTextProperty; DataItem='ControlA' (Name=''); target element is 'TextBlock' (Name='PART_MyTextBox'); target property is 'Text' (type 'String')

如何修复绑定以避免这些消息?

它们是CustomControls的UserControls吗。。。这有很大的区别。我怎样才能解决这个问题?。。。这取决于MyTextProperty的实际定义位置。。。你没有给我们看,所以我们还不能帮你。他们是WPF用户控制。每个UserControl都有自己的ViewModel;MyTextProperty是在ControlAViewModel中定义的。我将更新这个问题。然后,您的问题只是您将SpecialControlViewModel的实例设置为SpecialControl的DataContext,而不是ControlAViewModel的实例,或者您试图将数据绑定到超出范围的视图模型的属性。两个视图模型之间有什么联系?为什么要为特殊控件创建两种样式呢?如果一种样式在另一种样式内,可能需要一个更像这样的相对资源绑定:Text={Binding Path=DataContext.MyTextProperty Mode=one-way,RelativeSource={RelativeSource AncestorType={x:Type yourprofix:ControlA},Converter={StaticResource qualityGraphicConverter}/>`SpecialControl是一个UserControl,它包含一些其他控件和自定义功能。ControlA甚至可以存在于SpecialControl之外。所以ControlA有自己的viewModel,而SpecialControl有自己的viewModel。WPF在运行时解析绑定,所以所有的工作都正常,但我认为这不是使用绑定的正确方法。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:My.Controls">

<Style TargetType="{x:Type local:SpecialControl}">
    <Setter Property="Template">
        <Setter.Value>
            [...]
            <TextBlock Name="PART_MyTextBox" Text="{Binding Path=DataContext.MyTextProperty  Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource qualityGraphicConverter}}" />
System.Windows.Data Error: 40 : BindingExpression path error: 'MyTextProperty ' property not found on 'object' ''SpecialControlViewModel' (HashCode=8043914)'. BindingExpression:Path=DataContext.MyTextProperty; DataItem='ControlA' (Name=''); target element is 'TextBlock' (Name='PART_MyTextBox'); target property is 'Text' (type 'String')