如果我將XAML元素綁定到數據源屬性,並且數據源變化更快,那麼人眼可以看到我假設UI也被重繪得更快,然後人眼可以看到並浪費資源。如果屬性發生變化,那麼將屬性更改提升爲一個標誌而不是觸發UI的重新繪製,然後觸發UI重繪的定時器會是一個好主意嗎?還是我錯過了UI如何重新繪製?XAML綁定UI更新
0
A
回答
0
您能使用提升屬性更改事件,也許這樣的delyed調用...
public static class DispatcherExtensions
{
private static Dictionary<string, DispatcherTimer> timers =
new Dictionary<string, DispatcherTimer>();
private static readonly object syncRoot = new object();
public static void DelayInvoke(this Dispatcher dispatcher, string namedInvocation,
Action action, TimeSpan delay,
DispatcherPriority priority = DispatcherPriority.Normal)
{
lock (syncRoot)
{
RemoveTimer(namedInvocation);
var timer = new DispatcherTimer(delay, priority, (s, e) => action(), dispatcher);
timer.Start();
timers.Add(namedInvocation, timer);
}
}
public static void CancelNamedInvocation(this Dispatcher dispatcher, string namedInvocation)
{
lock (syncRoot)
{
RemoveTimer(namedInvocation);
}
}
private static void RemoveTimer(string namedInvocation)
{
if (!timers.ContainsKey(namedInvocation)) return;
timers[namedInvocation].Stop();
timers.Remove(namedInvocation);
}
}
然後
private object _property;
public object Property
{
get { return _property; }
set
{
if (_property != value)
{
_property = value;
Dispatcher.DelayInvoke("PropertyChanged_Property",(Action)(() =>
{
RaisePropertyChanged("Property");
}),TimeSpan.FromMilliseconds(500));
}
}
}
不知道我喜歡它雖然...
-1
對於這種情況下的典型模式下,正在實施的屬性作爲
private object _property;
public object Property
{
get { return _property; }
set
{
if (_property != value)
{
_property = value;
RaisePropertyChanged("Property");
}
}
}
將更新您的結合僅當值改變
-1
在這種情況下的計時器觸發UI更新是通向走。爲了保持用戶界面的流暢度,需要約40ms的時間間隔。
public class ViewModel
{
private Timer updateTimer;
public ViewModel()
{
updateTimer = new Timer();
updateTimer.Interval = 40;
updateTimer.Elapsed +=new ElapsedEventHandler(updateTimer_Elapsed);
updateTimer.Start();
}
private object _property;
public object Property
{
get { return _property; }
set
{
if (_property != value)
{
_property = value;
}
}
}
void updateTimer_Elapsed(object sender, ElapsedEventArgs e)
{
RaisePropertyChanged();
}
}
不帶參數調用RaisePropertyChanged()
將強制UI刷新所有綁定。如果你不想要這個,你可以使用標誌或註冊表來標記哪些屬性需要更新。
相關問題
- 1. 刷新Xaml UI數據綁定
- 2. XAML數據綁定在屬性更改時不更新UI
- 3. XAML數據綁定 - UI不會自動更新
- 4. XAML中的強制綁定更新
- 5. WPF雙向綁定未從UI更新
- 6. 綁定不更新多個UI元素
- 7. 使用綁定屬性更新UserControl UI
- 8. WPF通過綁定從DataTable更新UI
- 9. 更新WPF UI綁定的數據源
- 10. 敲除模板綁定不更新UI
- 11. 更新UI綁定到相關屬性
- 12. 如何使用綁定更新UI
- 13. UI未更新綁定元素
- 14. XAML UI更新代碼隱藏
- 15. Windows 8 XAML數據綁定更新文本更改
- 16. XAML在綁定中綁定
- 17. 使用UI更新模型和綁定更新操作
- 18. Angularjs UI不會更新由承諾更新的服務綁定?
- 19. 綁定到XAML
- 20. WPF XAML綁定
- 21. XAML綁定組
- 22. WPF XAML綁定
- 23. 更新綁定
- 24. 當propertychanged被更新時更新另一個UI元素Xaml
- 25. 重新綁定,有一個XAML結合
- 26. 更改XAML中的綁定值
- 27. 在xaml中更改綁定值
- 28. XAML - 更改圖標依賴於綁定
- 29. 如何更新純粹在XAML中的DateTime.Now綁定?
- 30. 使用代碼更新TreeViewItem的綁定? (XAML/WPF)
它只是一個網格?或整個用戶界面? – 2012-07-09 06:49:50
如果數據源正在觸發INotifyPropertyChanged事件,則網格將響應它們。你可以實現一個計時器來減少PropertyChanged的發生次數嗎?例如。在500毫秒後,如果財產發生變化並且事件未發起,則發起事件。 – Michael 2012-07-09 06:58:35