我知道这个论点有不同的主题,但我仍然无法找到解决方案。 这里有具体的问题:
我写了几个WPF UserControl
。每个UserControl
都有自己的ViewModel
。 Xaml
视图位于单独的Xaml
模板(Themes
文件夹中)。
有一个“特殊”控件可托管其中一些自定义UserControl
。这是场景
SpecialControl.xaml
<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>
[...]
<ControlA PropertyA="{Binding Path=DataSource, RelativeSource={RelativeSource TemplatedParent}}" />
[...]
PropertyA
没问题,因为它绑定到SpecialControlViewModel.DataSource
。
ControlA.xaml
<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}}" />
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')
如何修复我的绑定以避免这些消息?