3

Avalon Wizardコントロールを使用しています。ページがたくさんありますが、問題が発生しているのは2つだけなので、含まれているのは2つだけです。

<Grid Name="MainGrid">
  <w:Wizard Name="MyWizard"
            w:Designer.PageIndex="0"
            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 Name="DeductionPage"
                    Header="Policy Details"
                    AllowNext="{Binding ElementName=MainGrid, Path=DataContext.CanContinue}">

この問題では、メインページの[次へを許可]は完全に機能していますが、CanContinueプロパティがfalseに設定されていても、[控除]ページでは[次へ]ボタンを常に使用できます。

CanContinue2番目のページがロードされたときにのみfalseに設定されることに注意してください。

    private bool canContinue;
public bool CanContinue
{
  get { return canContinue; }
  set
  {
    canContinue = value;
    NotifyPropertyChanged("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')

これは私の問題があるページで発生していますが、なぜ2ページ目だけで問題になるのでしょうか。1ページ目と2ページ目はまったく同じものにバインドされ、最初のページは完全に機能します。

問題は最初のページを除くすべてのページにあり、すべてが同じレベルの同じウィザードの子です。

助言がありますか?

4

1 に答える 1

0

のコードが表示されていないためCanContinue、これは推測に過ぎません。ただし、これらの場合、原因は通常、プロパティがINotifyPropertyChangedイベントを発生させないことにあります。あなたの場合、プロパティCanContinueは INotifyPropertyChanged イベントを発生させる必要があります。

基本的に、の値をCanContinue評価する必要があるときはいつでも、INotifyPropertyChanged を発生させる必要があります。これは、値CanContinueが変更されたことを UI に通知し、UI はバインディングを再評価する必要があります。

多くの場合、INotifyPropertyChanged はプロパティ自体の外で発生します。メソッドがなんらかの作業を実行する結果、UI がまだ正しくバインドされていることを確認する必要がある場合などです。あなたの場合、これはページ間を移動するときかもしれません。

于 2013-02-13T18:53:34.290 に答える