尝试使用caliburn实现简单验证。我想要的是根据特定条件启用/禁用保存按钮。 视图:
`<xctk:MaskedTextBox x:Name="pm_personId" cal:Message.Attach="[Event LostFocus] = [Action CanSave()]" Mask="00-000-000?"/>
<Button Content="Save" x:Name="Save" />`
型号:
public class PersonModel
{
public String personId { get; set; }
public PersonModel() {}
public PersonModel(String id)
{
this.id = personId;
}
}
视图模型:
[ImplementPropertyChanged]
public class PersonViewModel : Screen
{
public PersonModel pm { get; set; }
public PersonViewModel()
{
pm = new PersonModel();
}
public bool CanSave()
{
MessageBox.Show(pm.personId);
if (pm.personId != null)
return true;
else return false;
}
}
使用正确的值触发MessageBox但未启用按钮。我错过了什么。要么是错过了使用caliburn的东西,要么就是做了太多的魔术。我开始怀疑它最初可能会节省你的时间会在调试中丢失,只是我的外表。
答案 0 :(得分:1)
谢谢@CCamilo,但你的答案不完整。对于遇到类似问题的其他人,下面是我的最终工作代码:
[ImplementPropertyChanged]
public class PersonModel
{
public String personId { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public PersonModel() {}
public PersonModel(String id)
{
this.id = personId;
}
}
[ImplementPropertyChanged]
public class PersonViewModel : Screen
{
public PersonModel pm { get; set; }
public PersonViewModel()
{
pm = new PersonModel();
this.pm.PropertyChanged += pm_PropertyChanged;
}
void pm_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
NotifyOfPropertyChange(() => CanSave);
}
public bool CanSave
{
get { return pm.personId != null; }
}
}
答案 1 :(得分:0)
你遇到的错误是CanSave()方法..它应该是一个属性:
public bool CanSave
{
get
{
if (pm.personId != null)
return true;
else return false;
}
}