我是WPF和C#的新手,試圖瞭解如何從BL類更新UI元素(以保持邏輯和UI之間的分離)bl從C++獲取定期更新網絡組件,並且應該在新參數出現後更新表單(我在msdn網站上閱讀,但我希望看到一些具體的示例以確保其正確)定期更新wpf標籤
0
A
回答
1
由於您的定期從C++網絡組件評論,我假設你已經有一個系統來更新你的財產。我會在視圖模型類中公開您的業務類中的財產,這是一個具有公共屬性的類,並且專門設計用於將所有必需數據提供給視圖的函數或UserControl
。老實說,我不會在商務課(具體取決於商務課的意思)中擁有那個(或任何)功能......我會親自把它直接放到視圖模型中,或者有一個經理/服務類,暴露它。
如果您堅持保持它在原地,您必須在您的業務類中實施event
或delegate
,以便可以提醒該類用戶何時更改值。然後,您可以簡單地將視圖模型類中的處理程序附加到event
/delegate
,並在實際屬性更改時輕鬆更新公開的屬性。
因此,它會在你的商務課中出現這樣的情況......(我假設你的價值是int
,但如果它不正確,你可以改變它......校長是一樣的):
public delegate void FieldUpdate(int value);
public FieldUpdate OnFieldUpdate { get; set; }
...
private int field;
public int Field
{
get { return field; }
set
{
if (value != field)
{
field = value;
if (OnFieldUpdate != null) OnFieldUpdate(field);
}
}
}
然後在您的視圖模型:
private YourBusinessClass instance = new YourBusinessClass();
public YourBusinessClass Instance
{
get { return instance; }
set { instance = value; NotifyPropertyChanged("Instance"); }
}
附加的處理程序:
instance.OnFieldUpdate += OnBusinessClassFieldUpdate;
...
public void OnBusinessClassFieldUpdate(int value)
{
Instance = value;
}
現在,無論何時在業務類中更新字段,視圖模型(以及數據綁定的UI控件)都將通過delegate
自動更新。
相關問題
- 1. 定期更新標籤
- 2. 定期更新Tkinter的標籤
- 3. 將日期時間更新爲WPF中的標籤
- 4. WPF MVVM更新標籤文本
- 5. 綁定更新標籤
- 6. Rails - 定期更新某些標籤而不刷新頁面
- 7. 更新Lucene.net指標定期
- 8. WPF MediaElement標籤{綁定位置}不更新
- 9. 更新標籤
- 10. 更改標籤文本定期的Javascript
- 11. 如何在iOS(每秒)上定期更新標籤?
- 12. WPF綁定更新
- 13. JQuery更新標籤
- 14. 更新dojox.mobile.Heading標籤
- 15. 標籤不更新
- 16. PyQt5:更新標籤?
- 17. NSTimer更新標籤
- 18. MVVM更新標籤
- 19. i18n - 更新標籤
- 20. JButton更新標籤
- 21. Swing - 更新標籤
- 22. 更新kml標籤
- 23. 更新Android標籤圖標
- 24. 定期刷新DataGrid C#WPF
- 25. 使用定時器更新標籤
- 26. 固定標籤更新通知
- 27. SilverLight刷新標籤週期
- 28. WPF座標系統更新
- 29. 標籤網址操作特定標籤網址更新
- 30. 谷歌地圖 - 定期更新標記
在做這件事之前,你應該閱讀一下UI設計模式,尤其是MVVM,它將邏輯和UI分開。在WPF中,UI控件通常綁定到視圖模型類中的屬性,所以您應該讓自己熟悉[WPF中的數據綁定](http://msdn.microsoft.com/zh-cn/library/ms752347.aspx)。下一步將要了解如何從[後臺線程]安全地更新綁定源屬性(http://msdn.microsoft.com/zh-cn/library/ms741870.aspx)。聽起來很像要學習(事實上),但這是值得的。 – Clemens
簡單的方法是隻更新[Dispatcher.Invoke](http://msdn.microsoft.com/en-us/library/hh199416.aspx)調用中的TextBlock或Label控件。 – Clemens