代码之家  ›  专栏  ›  技术社区  ›  Detlef D Soost

多重绑定未设置值

  •  0
  • Detlef D Soost  · 技术社区  · 6 年前

    我有一个PdfViewerView。xaml( UserControl )它包含一个名为“PdfViewerCtrl”的控件。 现在我有一个 ListBox 使用上下文菜单,如果用户单击上下文菜单项,则会显示具有多绑定触发器的事件:

    <ContextMenu>
                  <MenuItem Header="Löschen"/>
                  <i:Interaction.Triggers>
                     <i:EventTrigger
                                        EventName="PreviewMouseDown">
                        <i:InvokeCommandAction
                                            Command="{Binding DeleteAnnotationCmd}">
                           <i:InvokeCommandAction.CommandParameter>
                              <MultiBinding Converter="{StaticResource MultiBindingConv}">
                                 <Binding ElementName="PdfUserCtrl" Path="PdfViewerCtrl" />
                                 <Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}" Path="PdfViewerCtrl" />
                              </MultiBinding>
                           </i:InvokeCommandAction.CommandParameter>
                        </i:InvokeCommandAction>
                     </i:EventTrigger>
                  </i:Interaction.Triggers>
               </ContextMenu>
    

    我想通过考试 PdfViewerCtrl (我在开头提到)作为参数,但它总是 DependencyProperty.UnsetValue .

    正如你所见,我尝试了两种绑定到 PdfViewerCtrl 但两者都不起作用。

    1 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

    尝试设置 Tag 属性到 PdfViewerCtrl 使用 x:Reference 标记扩展,然后绑定到 标签 的属性 ContextMenu :

    <ContextMenu Tag="{x:Reference PdfViewerCtrl}">
        <MenuItem Header="Löschen"/>
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="PreviewMouseDown">
                <i:InvokeCommandAction Command="{Binding DeleteAnnotationCmd}">
                    <i:InvokeCommandAction.CommandParameter>
                        <MultiBinding Converter="{StaticResource MultiBindingConv}">
                            <Binding RelativeSource="{RelativeSource AncestorType=ContextMenu}" Path="Tag" />
                        </MultiBinding>
                    </i:InvokeCommandAction.CommandParameter>
                </i:InvokeCommandAction>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </ContextMenu>