我在理解如何通過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