我正在努力解决如何正确创建有效绑定的问题。我有一个,例如PanelA
,它是一个用户控件。它的InteractionRequestTrigger
定义如下
<i:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding EditRequest, Mode=OneWay}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True">
<prism:PopupWindowAction.WindowContent>
<view:Editor DataContext="{Binding Path=EditorVM, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, UpdateSourceTrigger=PropertyChanged}"/>
</prism:PopupWindowAction.WindowContent>
</prism:PopupWindowAction>
</prism:InteractionRequestTrigger>
</i:Interaction.Triggers>
因此,当PanelA
的视图模型触发交互时,应打开一个带有视图Editor
的新弹出窗口。
以前我使用DI将视图模型直接注入Editor
但我不能这样做,因为它会根据用户操作时间而改变。因此,在PanelA
的视图模型中,我添加了一个属性EditorVM
,其中包含此弹出窗口的视图模型,我正在尝试Editor
的数据上下文。显然我的路径错了。
这是我得到的错误:
System.Windows.Data Error: 4 : Cannot find source for binding with reference
'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1''.
BindingExpression:Path=EditorVM; DataItem=null; target element is 'Editor' (Name=''); target property is 'DataContext' (type 'Object')
我也试过
<view:Editor DataContext="{Binding Path=DataContext.EditorVM, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, UpdateSourceTrigger=PropertyChanged}"/>
有类似的结果
我通过通知发送依赖项来解决问题,我使用DI来设置数据上下文,但我仍然很好奇如何将数据绑定到属性。
答案 0 :(得分:0)
我们有同样的问题解决我的问题......
<i:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding EditRequest, Mode=OneWay}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True">
<prism:PopupWindowAction.WindowContent>
<view:Editor>
<view:Editor.DataContext>
<local:EditorVM/>
</view:Editor.DataContext>
</view:Editor>
</prism:PopupWindowAction.WindowContent>
</prism:PopupWindowAction>
</prism:InteractionRequestTrigger>