我有一个WPF应用程序,我使用Prism作为体系结构。
我有一些定制的东西:我有一个UserControl(向导),它可以接收一个FrameworkElement。此元素显示在带有ContentPresenter的向导用户控件中。
基本上,将使用此用户控件的视图将具有以下代码:
<UserControl x:Class"My.Instance"
//skipping namespaces
mvvm:ViewModelLocator.AutoWireViewModel="True">
<Wizard>
<Wizard.ContentElement>
<TextBlock Text="{Binding MyInstanceProperty}"/>
</Wizard.ContentElement>
</Wizard>
</UserControl>在“向导”UserControl中,我有这样的东西:
<ContentControl Content="{Binding ContentElement}" Margin="10"/>上下文是用户控件后面的代码(设置在根Grid上)。
在运行时,我有以下错误
System.Windows.Data错误: 40 : BindingExpression路径错误:“对象”“向导”(HashCode=29548405)上找不到“MyInstanceProperty”属性。BindingExpression:Path=MyInstanceProperty;DataItem='WizardViewModel‘(HashCode=29548405);目标元素是'TextBlock’(名称=‘’);目标属性是'Text‘(输入'String')
因此,我的TextBlock似乎在向导UserControl上设置了它的DataContext,而没有设置在"My.Instance“所有者上。
我想是因为我把它托管在ContentPresenter中吧?
我怎么才能避免这种情况?
发布于 2015-09-16 14:41:23
<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}}, Path=DataContext.MyInstanceProperty}"/>EDIT>>>>>
向导视图:
<ContentControl Content="{Binding ContentElement}" Margin="10"/>向导视图模型:
ContentElement = new pageViewModel();App.xaml:
<DataTemplate DataType="{x:Type myViewModel:pageViewModel}">
<local:pageView/>
</DataTemplate>https://stackoverflow.com/questions/32610609
复制相似问题