Telerik Busy Индикатор не виден - PullRequest
2 голосов
/ 14 декабря 2011

Привет, я пытаюсь использовать индикатор Telerik Busy с MVVM.У меня есть индикатор занятости в Mainwindow.Когда есть действие (нажатие кнопки) на одном из пользовательских элементов управления, находящихся в окне, модель представления пользовательских элементов управления отправляет сообщение в MinwindowviewModel.В сообщении должен появиться индикатор занятости.Но это не работает.Почему это не работает?

Модель представления пользовательских элементов управления

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;
    }

В представлении главного окна корневой элемент

1010 *

1 Ответ

5 голосов
/ 14 декабря 2011

Что делает AccountDetails a = AccountRepository.GetAccountDetailsByID(CustomerId);? Я предполагаю, что все, что происходит там, работает в потоке пользовательского интерфейса. Поскольку все это хорошо в потоке пользовательского интерфейса, у интерфейса никогда не будет шанса обновить и показать RadBusyIndicator. Попробуйте перенести всю работу в OnStart на BackgroundWorker, включая отправку сообщений. Здесь вы столкнетесь с проблемами, поскольку сообщения будут обновлять поток пользовательского интерфейса из фонового потока, поэтому вам нужно будет использовать Dispatcher для установки IsBusy на true или false.

...