我在理解如何通过ViewModel传播Model类中的属性更改事件并进入视图时遇到问题。我想要符合MVVM模式,请记住这一点。由模型事件触发的ViewModel中的WPF MVVM PropertyChanged通知
我有一个模型,我试图通过ViewModel公开。 My Model类查询一个Api调用以获取服务器状态并在公共属性中显示该状态。例如:
public class ServerStatusRequest : ApiRequest
{
//Exposable properties by request
public ServerStatusHelperClass Status { get; set; }
哪里ServerStatusHelperClass
只是在查询合并业绩的包装:
public class ServerStatusHelperClass
{
public bool ServerStatus { get; set; }
public int OnlinePlayers { get; set; }
我的ApiRequest基类中的很酷的事情是,它会检查特定的API调用的缓存时间并通过使用System.Timers.Timer更新结果。因此,例如,ServerStatus Api调用在Api上缓存3分钟,因此每隔3分钟我的ServerStatusApiRequest
对象就会有新的数据。我在所有ApiRequest类暴露出UpdatedResults
事件时,新的数据进来通知。
现在,我想我的ViewModel有中ServerStatusApiRequest
一个实例,并绑定到其ServerStatusHelperClass Status
财产和每一次熬夜与最新的变化信息已更新,但我的视图(对于绑定)无法知道我的模型,因此,我不知道ApiRequest
类中的我的UpdatedResults
事件。我如何通过ViewModel将其反映到视图中?我在这里做了些什么奇怪的事吗?
这里是我有什么是半工作,但我觉得是一个非常哈克解决方案:
在我的ViewModel:
public const string EveServerStatusPropertyName = "EveServerStatus";
private ServerStatusRequest _eveServerStatus = new ServerStatusRequest();
public ServerStatusRequest EveServerStatus
{
get
{
return _eveServerStatus;
}
set
{
//if (_eveServerStatus == value)
//{
// return;
//}
//RaisePropertyChanging(EveServerStatusPropertyName);
_eveServerStatus = value;
RaisePropertyChanged(EveServerStatusPropertyName);
}
}
public void UpdateEveServerStatus(object sender, EventArgs e)
{
EveServerStatus = (ServerStatusRequest)sender;
}
而在的ViewModels构造我订阅模式的事件:
EveServerStatus.UpdatedResults += new UpdatedResultsEventHandler(UpdateEveServerStatus);
正如你所看到的,这看起来非常多余。而且我还遇到了一个问题,那就是我必须在筹码中注释掉EveServerStatus
,因为那时_eveServerStatus
已经更新为value
,但是没有它知道,我想要发射这个事件。
我摔倒了,因为我错过了一个关键概念,可以更轻松地将这一切联系在一起。
感谢您的任何意见。
不幸的是,你是如何做到的。 – 2013-02-11 23:46:21
@RyanByrne请看我提供的答案,我会对你的想法感兴趣。 – forTruce 2013-02-12 00:57:27