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