【问题标题】:RelativeSource binding can't find Frame ancestorRelativeSource 绑定找不到 Frame 祖先
【发布时间】:2015-01-12 11:35:03
【问题描述】:

我试图将我应用Command 的实际Frame 对象作为CommandParameter 传递

XAML

<Frame NavigationUIVisibility="Hidden" Source="{Binding TargetContentPage}">
       <i:Interaction.Triggers>
             <i:EventTrigger EventName="ContentRendered">
                    <command:EventToCommand Command="{Binding ContentRendered}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Frame}}"/>
             </i:EventTrigger>
       </i:Interaction.Triggers>
</Frame>

C#

public RelayCommand<Frame> ContentRendered
{
     get
     {
          return new RelayCommand<Frame>(frame => frame.RemoveBackEntry());
     }
}

运行时,会引发 NullReferenceException,表示 frame 为空。 上面的代码可能有什么问题?

【问题讨论】:

  • 您是否可能缺少 Mode=FindAncestor?
  • @Clemens 是的,你是对的,我错过了,请添加它作为答案。

标签: c# wpf xaml binding navigation


【解决方案1】:

Frame 和 EventToCommand 之间没有祖先/后代关系。改用 ElementName 绑定:

<Frame x:Name="frame" ...>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="ContentRendered">
            <command:EventToCommand
                Command="{Binding ContentRendered}"
                CommandParameter="{Binding ElementName=frame}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Frame>

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    相关资源
    最近更新 更多