如果我將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中的強制綁定更新
- 3. UI未更新綁定元素
- 4. 更新WPF UI綁定的數據源
- 5. 如何使用綁定更新UI
- 6. WPF通過綁定從DataTable更新UI
- 7. WPF雙向綁定未從UI更新
- 8. Windows 8 XAML數據綁定更新文本更改
- 9. XAML在綁定中綁定
- 10. 綁定到XAML
- 11. XAML綁定組
- 12. WPF XAML綁定
- 13. WPF XAML綁定
- 14. 當propertychanged被更新時更新另一個UI元素Xaml
- 15. 更改XAML中的綁定值
- 16. 在xaml中更改綁定值
- 17. XAML - 更改圖標依賴於綁定
- 18. 使用代碼更新TreeViewItem的綁定? (XAML/WPF)
- 19. 如何在更新ViewModels時防止重新綁定Kendo UI Grid
- 20. UI綁定更新到一個ObservableCollection被重新賦值
- 21. 綁定到在XAML
- 22. 綁定XAML在WPF
- 23. 無XAML綁定[WPF]
- 24. 保存綁定XAML
- 25. XAML文本綁定
- 26. xaml如何綁定?
- 27. XAML綁定問題
- 28. 餅圖XAML綁定
- 29. XAML綁定屬性
- 30. WPF綁定更新
它只是一個網格?或整個用戶界面? – 2012-07-09 06:49:50
如果數據源正在觸發INotifyPropertyChanged事件,則網格將響應它們。你可以實現一個計時器來減少PropertyChanged的發生次數嗎?例如。在500毫秒後,如果財產發生變化並且事件未發起,則發起事件。 – Michael 2012-07-09 06:58:35