首页 新闻 搜索 专区 学院

windows phone用mvvm模式实现INotifyPropertyChanged接口后的错误

0
悬赏园豆:10 [已关闭问题] 关闭于 2012-04-05 14:37

    今天看一位博友,自己写了点程序但出问题了,再次求助,自己解决不了。看下面这个程序的关键代码

 public class ViewModel:INotifyPropertyChanged
{
string state;
public string State
{
set
{
state = value;
Raise("State");
}
get
{
return state;
}

}
string data;
public string Data
{
set
{
data = value;
Raise("Data");
}
get
{
return data;
}
}
ICommand buttomCommand;
public ICommand Button
{
get
{
buttomCommand = new DeleCommand((o) =>
{
NetTask net = new NetTask();
net.OnStateChanged += new NetTask.Dele(net_OnStateChanged);
net.OnStateChanged += new NetTask.Dele(Method);///这行多此一举,是为了加深事件的理解而写
net.StartNetTask(o);
}
);
return buttomCommand;
}
}
//public ICommand Button
//{
// get
// {
// buttomCommand = new DeleCommand((o) =>
// {
// State = "state";
// Data = "data";
// }
// );
// return buttomCommand;
// }
//}
void net_OnStateChanged(NetTask sender, EvevtClass args)
{
State= args.State + args.Time;
}
void Method(NetTask sender, EvevtClass args)
{
Data= args.Data;
}
public event PropertyChangedEventHandler PropertyChanged;
void Raise(string name)
{
if (PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}

重要的是Button这个命令,一调用这个命令就会报错,是调用PropertyChanged事件时报的错。如果把现的的命令代码注释了,改用下面注释的那段命令代码,就好了。但是这是为什么?

说明一下在调用net.StartNetTask(o)这个方法是,这个方法内部调用了

OnStateChanged 事件。
有没有人知道这是为什么,过会我把项目的源友上传,有兴趣的可以下载下来看看!
 
问题补充:

这是源代码下载地址,高手帮忙呀,谢谢了。

http://files.cnblogs.com/learnWindowsPhone/PhoneApp49.zip

刚才我想起我以前做的新浪微博时,明白错误出在哪里了,因为我在调用那个事件里在网络的异步操作,所以出错的代码改成如下的例子就行了

            Deployment.Current.Dispatcher.BeginInvoke(() =>
{
State = args.State + args.Time;
}
);

前面出错的原因是ui线程阻塞,用这个方法就不阻塞了。

learnWindowsPhone的主页 learnWindowsPhone | 初学一级 | 园豆:38
提问于:2012-04-03 17:05
< >
分享
所有回答(2)
0

关注。。。

KivenRo | 园豆:1722 (小虾三级) | 2012-04-04 08:09
0

明白错误出在哪里了,因为我在调用那个事件里在网络的异步操作,所以出错的代码改成如下的例子就行了

            Deployment.Current.Dispatcher.BeginInvoke(() =>
{
State = args.State + args.Time;
}
);

前面出错的原因是ui线程阻塞,用这个方法就不阻塞了

learnWindowsPhone | 园豆:38 (初学一级) | 2012-04-05 14:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册