2013-09-07 2 views
0

ObservableCollection의 DateTime이 목록 상자에 바인딩되어 있습니다. 여러 국가의 현재 시간을 보여줍니다. Listbox에는 itemtemplate이있어서 HH : MM : SS가 표시되는 방식을 지정할 수 있습니다.분당 초당 UI를 업데이트하는 가장 좋은 방법은 무엇입니까?

이제는 1 초마다 ObservableCollection의 각 항목에 대한 시간을 업데이트해야하므로 UI도 적절히 업데이트됩니다.

이것을 달성하는 가장 좋은 방법은 무엇입니까?

+1

나는 DispatcherTimer보다 위임을 선호하여 더 가볍습니다. 대리자를 사용하는 비동기 호출은 현재 despatcher를 통해 UI 스레드를 업데이트 할 수 있습니다. –

답변

2

가장 진보 된 (그리고 간단한) 방법은 수신 확장자를 사용하는 것입니다

Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1)). 
Subscribe(o => 
{ 
    // every second set current time on every item. 
    foreach(var item in YourCollection) 
    { 
    item.CurrentTime = DateTime.Now; 
    } 
}); 

및 item.CurrentTime 세터에서 물론 당신이 PropertyChange 이벤트를 마련 할 필요가

.

+1

구독이 UI 스레드에서 실행되는지 확인하기 위해 ObserveOnDispatcher를 포함 할 수 있습니다. 또는 UI 스레드에서 PropertyChange 이벤트가 발생했는지 확인하십시오. –

관련 문제