我正在使用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')
这是在我的问题所在的页面上发生的,但为什么只在第二页上出现问题?第一页和第二页完全相同,第一页完美无缺!
问题出现在除第一页以外的所有页面上,所有页面都是同一级别的同一个向导的子项。
有什么建议吗?
答案 0 :(得分:0)
没有看到CanContinue
的代码,这是一个猜测。然而,在这些情况下,罪魁祸首通常是由于财产没有引起INotifyPropertyChanged事件。在您的情况下,属性CanContinue
必须引发INotifyPropertyChanged事件。
基本上,只要需要评估CanContinue
的值,就必须引发INotifyPropertyChanged。这将通知UI CanContinue
的值已更改,并且UI必须重新评估绑定。
通常,INotifyPropertyChanged会在属性本身之外引发。例如,当某个方法执行某些工作时,需要确保UI仍然正确绑定。在您的情况下,这可能是在页面之间导航时。