2011-12-14 3 views
2

안녕하세요, 저는 MVVM에서 telerik 통화 중 표시기를 사용하려고합니다. Mainwindow에 Busy 표시기가 있습니다. 창에있는 사용자 컨트롤 중 하나에서 작업 (단추 클릭)이있을 때 사용자 컨트롤보기 모델은 MinwindowviewModel에 메시지를 보냅니다. 메시지에서 통화 중 표시가 나타납니다. 그러나 이것은 효과가 없습니다. 왜 이것이 작동하지 않습니까?telerik 통화 중 표시기가 보이지 않습니다.

사용자 컨트롤 모델 볼

public class GetCustomerVM : ViewModelBase 
{ 
    private int _CustomerId; 
    public int CustomerId 
    { 
     get { return _CustomerId; } 
     set 
     { 
      if (value != _CustomerId) 
      { 
       _CustomerId = value; 
       RaisePropertyChanged("CustomerId"); 
      } 
     } 
    } 

    public RelayCommand StartFetching { get; private set; } 
    public GetCustomerVM() 
    { 
     StartFetching = new RelayCommand(OnStart); 
    } 

    private void OnStart() 
    { 
     Messenger.Default.Send(new Start()); 
     AccountDetails a = AccountRepository.GetAccountDetailsByID(CustomerId); 
     Messenger.Default.Send(new Complete()); 
    } 
} 

[사용자 컨트롤보기 모델은 다음과 같습니다

메인 창보기에서
private bool _IsBusy; 
    public bool IsBusy 
    { 
     get { return _IsBusy; } 
     set 
     { 
      if (value != _IsBusy) 
      { 
       _IsBusy = value; 
       RaisePropertyChanged("IsBusy"); 
      } 
     } 
    } 
    public WRunEngineVM() 
    { 
     RegisterForMessages(); 
    } 

    private void RegisterForMessages() 
    { 
     Messenger.Default.Register<Start>(this, OnStart); 
     Messenger.Default.Register<Complete>(this, OnComplete); 
    } 

    private void OnComplete(Complete obj) 
    { 
     IsBusy = false; 
    } 

    private void OnStart(Start obj) 
    { 
     IsBusy = true; 
    } 

, 루트 요소는 AccountDetails a = AccountRepository.GetAccountDetailsByID(CustomerId);는 무엇입니까

<telerik:RadBusyIndicator IsBusy="{Binding IsBusy}" telerik:StyleManager.Theme="Windows7"> 

답변

5

입니다 ? 내 생각 엔 UI 스레드에서 실행되고있는 모든 일이 일어난다는 것입니다. UI 스레드에서 모든 일이 일어나기 때문에 UI를 새로 고치고 RadBusyIndicator을 표시 할 가능성은 전혀 없습니다. 메시지를 보내는 것을 포함하여 OnStart에있는 모든 작업을 BackgroundWorker으로 옮기십시오. 메시지는 UI 스레드를 백그라운드 스레드에서 업데이트하므로 IsBusytrue 또는 false으로 설정하려면 Dispatcher을 사용해야하므로 여기에서 문제가 발생합니다.

관련 문제