我正在使用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')


这是在我的问题所在的页面上发生的,但是为什么仅在第二页上会出现问题呢?第一和第二页绑定到完全相同的东西,并且第一页工作完美!

问题出在首页以外的所有页面上,它们都是同一级别上同一向导的子级。

有什么建议么?

最佳答案

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

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

通常,INotifyPropertyChanged在属性本身之外引发。例如,当某个方法执行某些工作时,需要确保UI仍正确绑定。就您而言,这可能是在页面之间导航时。

关于c# - WPF Avalon向导绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14853824/

10-12 12:43
查看更多