博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows 8.1 开发过程中遇到的小问题
阅读量:6002 次
发布时间:2019-06-20

本文共 2566 字,大约阅读时间需要 8 分钟。

最近在开发Windows 8 应用的时候碰到了一个莫名的问题,错误内容如下:(其中 **.DLL是本地创建的项目,在主项目中添加了引用,其中大部分代码是MVVM light 框架库的代码)

 

System.InvalidCastException”类型的异常在 **.DLL 中发生,但未在用户代码中进行处理

其他信息: Unable to cast COM object of type 'System.ComponentModel.PropertyChangedEventHandler' to class type 'System.ComponentModel.PropertyChangedEventHandler'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.

前提是:在charm栏中选择分享,并选择分享到的应用;正常启动应用是不会有事的。(我很纳闷为什么,渴望大神赐教

 

出错代码是这里(红色字体部分):

[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate",            Justification = "This cannot be an event")]        protected virtual void RaisePropertyChanged(string propertyName)        {#if WIN8            if (string.IsNullOrEmpty(propertyName))            {                throw new NotSupportedException(                    "Raising the PropertyChanged event with an empty string or null is not supported in the Windows 8 developer preview");            }            else            {#endif                //VerifyPropertyName(propertyName);                var handler = PropertyChangedHandler;                if (handler != null)                {                    handler(this, new PropertyChangedEventArgs(propertyName));                }#if WIN8            }#endif        }

 

我以为是框架本身的问题,于是在相应的代码中,自己重新实现INotifyPropertyChanged接口,并实现此接口:

public class LoginViewModel : ViewModelBase,INotifyPropertyChanged    {        event PropertyChangedEventHandler PropertyChanged;        void NotifyPropertyChanged(string name)        {            if (PropertyChanged != null)                PropertyChanged(this,new PropertyChangedEventArgs(name);        }    }

我差了相关帖子,看到了这个回复:

Just cast it to INotifyCollectionChanged

var collectionChanged = propertyObject as INotifyCollectionChanged;if (collectionChanged != null)    collectionChanged.CollectionChanged += ... 于是我修改代码为如下:
public class LoginViewModel : ViewModelBase,INotifyPropertyChanged    {        public event PropertyChangedEventHandler PropertyChanged;        void NotifyPropertyChanged(string name)        {            var obj = this as INotifyPropertyChanged;            if (obj != null)                obj.PropertyChanged += (s, e) => {                    PropertyChanged(s, new PropertyChangedEventArgs(name));                };        }    }

 OK,问题解决,关键是谁能告诉我这是为什么,什么情况下会出现这个错误,为什么会在分享中出现,而正常状态下不会呢?

转载于:https://www.cnblogs.com/lihaiyin/p/3455856.html

你可能感兴趣的文章
对象复制
查看>>
Mongodb内嵌数组的完全匹配查询
查看>>
MyBatis学习笔记(四) 注解
查看>>
mass Framework class模块v12
查看>>
Android错误-error: Found text " " where item tag is expected
查看>>
Basic Oracle For Developer & Beginner
查看>>
oracle 自带函数大全及例子
查看>>
Android WebView 问题总集
查看>>
alert()、confirm()和prompt()的区别与用法
查看>>
如何用批处理文件写:获取当前日期的前一天
查看>>
head first java ( 16章 )
查看>>
分享:python-bitstring 3.1.2 发布
查看>>
(译)ECMAScript 5 Objects and Properties (一)
查看>>
UVA 796 - Critical Links (求桥)
查看>>
解决sourcesafe admin用户自动登录并且不用密码的问题
查看>>
HTML5 LocalStorage 本地存储
查看>>
XCode 5资源文件不自动更新问题
查看>>
typedef与define
查看>>
android 双卡手机发短信/判断手机是否为双卡
查看>>
Kali-linux安装之后的简单设置(转)
查看>>