WPF元素绑定

时间:2013-02-18 08:15:32

标签: wpf xaml binding

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

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;
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是绑定元素的绝对问题。但是,您没有给出源代码,因此您需要调试它并解决问题。

请参阅以下网址和“Cannot find source for binding with reference”部分,其中明确说明了如何调试和解决它。

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