首页 > 解决方案 > 从后台线程或计时器滴答更新与 viewmodel 属性绑定的 xaml 控件

问题描述

我有实现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;
}));
}

从计时器滴答声或后台线程更新绑定控制的正确方法是什么?

标签: c++windows-runtimewindows-10-universaluwp-xamlc++-cx

解决方案


推荐阅读