Обновить элемент управления xaml, связанный со свойством viewmodel из фонового потока или по таймеру - PullRequest
1 голос
/ 13 мая 2019

У меня есть модель представления, которая реализует INotifyPropertyChanged.

public ref class MyViewModel sealed: Windows::UI::Xaml::Data::INotifyPropertyChanged
{
  public:
    // Inherited via INotifyPropertyChanged
    virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged;

    property float Temperature
    {
        float get() { return m_temperature; }
        void set(float temperature) { SetProperty(m_temperature, temperature, "Temperature"); }
    }

    protected:
        void OnPropertyChanged(Platform::String ^ propertyName);

    private:
        float m_temperature = 0.0f;

    protected private:
        template<typename T>
        bool SetProperty(T& storage, T value, Platform::String^ propertyName)
        {
            if (storage == value) return false;
            storage = value;
            OnPropertyChanged(propertyName);
            return true;
        }
}

В тике таймера MainPage я пытаюсь обновить соответствующий элемент управления, как показано ниже:

void MainPage::OnDeviceControllerPollingTick(Object^ sender, Object^ e)
{
Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
    CoreDispatcherPriority::Normal,
    ref new Windows::UI::Core::DispatchedHandler([this]()
{
    const float temperature = 10.0f;
    MyViewModelObject->Temperature = temperature;
}));
}

Является ли правильнымспособ обновить привязанный элемент управления из таймера или фонового потока?

...