将视图模型绑定到棱镜弹出窗口

时间:2016-06-13 18:46:38

标签: c# wpf xaml prism

我正在努力解决如何正确创建有效绑定的问题。我有一个,例如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来设置数据上下文,但我仍然很好奇如何将数据绑定到属性。

1 个答案:

答案 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>