【问题标题】:How to handle a global variable when Navigating between pages ? (C++/CX XAML)在页面之间导航时如何处理全局变量? (C++/CX XAML)
【发布时间】:2017-08-23 14:10:58
【问题描述】:

试图在 c++/cx XAML 中重现 this c# XAML 教程示例。 转到视频中的this exact 位置,看看我们为什么要添加全局变量。

这里我如何声明我的变量“someImportantValue”:

namespace NewMultiPages
{
    ref class App sealed
    {
    protected:
        virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e) override;

    internal:
        App();
        static Platform::String ^someImportantValue;

    private:
        void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ e);
        void OnNavigationFailed(Platform::Object ^sender, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs ^e);
    };
}

这里是page2中的代码,我点击按钮转到page3:

void NewMultiPages::Page2::HyperlinkButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
    App::someImportantValue = ValueTextBox->Text;
    this->Frame->Navigate(Page3::typeid, ValueTextBox->Text);
}

编译时出现这个错误:

Erreur LNK2001 symbole externe non résolu "public: static class Platform::String ^ NewMultiPages::App::someImportantValue" (?someImportantValue@App@NewMultiPages@@2P$AAVString@Platform@@$AA) NewMultiPages C:\用户\lr\Documents\Visual Studio 2017\Projects\NewMultiPages\NewMultiPages\Page2.xaml.obj 1

【问题讨论】:

    标签: xaml navigation c++-cx


    【解决方案1】:

    不确定 ref 类上的静态字段的访问细节是什么,但如果您从字段中删除静态修饰符 - 您可以通过以下方式访问它:

    static_cast<App^>(App::Current)->someImportantValue = ValueTextBox->Text;
    

    【讨论】:

    • 这似乎可行,但它有多安全? ::current 到底是做什么的?多线程安全吗?
    • Current 返回当前的 App 实例。不确定从另一个线程调用或如果您有多个窗口时它的行为如何。再说一遍 - 将重要值存储在 App 中,虽然最常见 - 也可能是最糟糕的方法。您应该定义自己的具有不同职责的类,这些类是可单元测试的,最好不要使用 C++/CX。 :)
    • c+/cx 有什么问题?如果你想在 C++ 中做 UWP,我认为你需要这个?
    • 您需要它来与 WinRT 类型交互,但对于其他任何事情,您仍然可以使用纯 C++。 C++/CX 非常适合与 WinRT 交互,但也不是没有问题。 C++/WinRT 尝试解决其中的一些问题,但对于不必存在于 WinRT 派生类中的任何应用程序端数据结构和逻辑 - 使用标准 C++ 可能会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2021-11-29
    • 1970-01-01
    相关资源
    最近更新 更多