如何解决数据表单编辑模式&离开页面 MVVM Silverlight
| 在MVVM中使用SL4。 当我处于编辑模式下的数据表单时,导航到另一个页面,我遇到与RaisePropertyChanged(对象引用未设置为对象实例)相关的错误。 我发现并实施了它,以解决此问题。我的Dataform肯定命中了我的CancelEdit函数(我的IEditableObject实现的一部分,位于所有模型的基类中)。 我还用适当的值(例如,私有小数_Generaloverhead = 0.0M)初始化了所有可为空的声明/支持变量,因此,对于未设置为对象实例的内容,我确实感到困惑。在执行以下步骤后,将发生错误: 1)拔出数据表格并点击“编辑项目”按钮 2)在其中一个字段中编辑一个值 3)导航到另一个页面 此时,我在我的EditableModelBase中调用cancel edit(实现IEditableObject)。从这里开始,这是代码: 4)在EditableModelBase内部:public void CancelEdit()
{
foreach (var info in CurrentModel.GetType().GetProperties())
{
if (!info.CanRead || !info.CanWrite) continue;
// if (info.Name == \"StatusCodeString\" || info.Name == \"StatusCodeImage\" || info.Name == \"StatusCodeColor\") continue;
var oldValue = info.GetValue(Cache,null);
CurrentModel.GetType().GetProperty(info.Name).SetValue(CurrentModel,oldValue,null);
}
}
在我的foreach循环的第一次迭代中,当它到达.SetValue(CurrentModel)行时,它将调用我的模型。现在,我的模型RaisePropertyChanged中的每个道具,因为否则我的数据表单将无法识别它已被更改(从而允许“取消”按钮启用自身)。触发RaisingPropertyChanged时,它将调用以下代码块:
protected virtual void RaisePropertyChanged(string propertyName)
{
VerifyPropertyName(propertyName);
var handler = PropertyChanged;
if (handler != null)
{
handler(this,new PropertyChangedEventArgs(propertyName));
}
}
我尝试对处理程序和'new PropertyChangedEventArgs \'进行检查,并且都将它们实例化。我唯一能想到的是我的\'this \'对象设置为(在这种情况下)我的Models.Transactions模型的事实。即使那是真的,我也不知道如何解决它。
有任何想法吗?
解决方法
根据我从您的帖子中看到的内容,我会假设您所需要的属性之一不存在。为了将风险降到最低并可能解决问题,我建议采用以下实现:
public void CancelEdit() {
foreach (var info in CurrentModel.GetType().GetProperties()) {
if (!info.CanRead || !info.CanWrite) continue;
// if (info.Name == \"StatusCodeString\" || info.Name == \"StatusCodeImage\" || info.Name == \"StatusCodeColor\") continue;
var oldValue = info.GetValue(Cache,null);
var property = CurrentModel.GetType().GetProperty(info.Name);
if (property != null)
property.SetValue(CurrentModel,oldValue,null);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。