3

我正在使用Avalon Wizard控件,我有很多页面,但只有 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!

请注意,CanContinue仅在加载第二页时才设置为 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')

这发生在我的问题所在的页面上,但为什么它只会出现在第二页上?第一页和第二页绑定到完全相同的东西,第一页完美运行!

问题出在除第一页外的所有页面上,都是同一级别的同一向导的子级。

有什么建议么?

4

1 回答 1

0

没有看到 的代码CanContinue,这有点猜测。但是,在这些情况下,罪魁祸首通常是由于属性未引发INotifyPropertyChanged事件。在您的情况下,该属性CanContinue必须引发 INotifyPropertyChanged 事件。

本质上,每当CanContinue需要评估 的值时,都必须提高 INotifyPropertyChanged。这将通知 UI 的值CanContinue已更改,并且 UI 必须重新评估绑定。

很多时候,INotifyPropertyChanged 是在属性本身之外引发的。例如,当一个方法执行一些需要确保 UI 仍然正确绑定的工作时。在您的情况下,这可能是在页面之间导航时。

于 2013-02-13T18:53:34.290 回答