1

UserControlElement Binding を使用してまったく同じオブジェクトにバインドする2 つのコントロールがあります。

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

最初のコントロールでは問題なく動作しますが、2 番目のコントロールではバインド例外が発生します。

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また、2 番目のコントロールでバインディングを使用してみました。

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

2 に答える 2

0

バインディングソースがバインディングターゲットの論理ツリーにないのはMainGridだと思います。

于 2013-02-18T08:31:16.130 に答える
0

これはバインディング要素の問題です。ただし、ソースを提供していないため、デバッグして問題を解決したいと考えています。

以下の URL と " Cannot find source for binding with reference" セクションを参照してください。デバッグ方法と解決方法が明確に説明されています。

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

于 2013-02-18T08:40:01.103 に答える