【问题标题】:WPF Element BindingWPF 元素绑定
【发布时间】:2013-02-18 08:15:31
【问题描述】:

我的UserControl 中有两个控件,我使用元素绑定绑定到完全相同的对象:

AllowNext="{Binding ElementName=MainGrid, Path=DataContext.CanContinue}"

在第一个控件上它工作正常,但在第二个控件上我得到一个绑定异常:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=MainGrid'. BindingExpression:Path=DataContext.CanContinue; DataItem=null; target element is 'WizardPage' (Name='DeductionPage'); target property is 'AllowNext' (type 'Boolean')

我也尝试在第二个控件上使用RelativeSource 绑定:

AllowNext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}}, Path=DataContext.CanContinue}"

但这也给了我一个错误。

有谁知道这可能是什么?

--

这是简化的控件:

<Grid Name="MainGrid">
    <w:Wizard Name="MyWizard" w:Designer.PageIndex="1" DataContext="{Binding ElementName=MainGrid, Path=DataContext.Policy}" >
        <w:WizardPage Header="Main Member" MaxHeight="600" AllowNext="{Binding ElementName=MainGrid, Path=DataContext.CanContinue}" Name="MainPage">
        </w:WizardPage>
        <w:WizardPage Name="DeductionPage" Header="Policy Details" AllowBack="False" AllowNext="{Binding ElementName=MainGrid, Path=DataContext.CanContinue}">
        </w:WizardPage>
    </w:Wizard>
</Grid>

现在正如我所提到的,MainPage 绑定很好,而 DeductionPage 根本没有绑定并得到提供的错误。 MainGrid 的 DataContext 是从后面的代码中设置的:

    public void SetDataContext(object o)
{
  MainGrid.DataContext = o;
}

【问题讨论】:

  • 能否请您发布您的 UserControl 的源代码?我的第一个猜测是这可能是 DataContext 问题?
  • 我更新了我的问题!

标签: wpf xaml binding


【解决方案1】:

我敢打赌,作为绑定源的 MainGrid 不在绑定目标的逻辑树中。

【讨论】:

    【解决方案2】:

    这绝对是绑定元素的问题。但是,您没有提供源代码,因此您想对其进行调试并解决问题。

    请参阅下面的 url 和“Cannot find source for binding with reference”部分,其中清楚地解释了如何调试和解决它。

    http://www.codeproject.com/Articles/244107/Debugging-WPF-data-bindings

    【讨论】:

    • 谢谢,在发帖之前我确实看过这个。这并没有帮助我找到解决方案。当“使用跟踪消息”时,我的所有属性等都拼写正确,因为它们是从有效的页面复制的,转换器在这种情况下也不起作用,作者承认它是有限的!
    • 如果你有上面的控件会发生什么?我刚刚删除了第一个控件,只有第二个控件。
    • 好的,所以当删除第一页并留下第二页时,它在第二页上都能完美运行。我不知道这可能是什么。我正在使用AvalonWizard
    • 我不太了解 AvalonWizard。但是,我建议您在 MainGrid 的第二个控件中尝试不同的路径。那么我们将得出结论是什么问题?
    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2015-08-30
    • 2015-09-20
    • 1970-01-01
    • 2011-04-07
    • 2018-07-18
    • 2018-05-14
    相关资源
    最近更新 更多