9

明らかな何かが欠けているに違いありませんが、何がわからないのです。

空白のC++メトロアプリを作成し、UIにバインドするモデルを追加しましたが、関連するさまざまなコンパイラエラーが発生しxamltypeinfo.g.cpp、何を見逃したのかわかりません。

私のヘッダーファイルは次のようになります。

#pragma once
#include "pch.h"
#include "MyColor.h"

using namespace Platform;

namespace CppDataBinding
{
    [Windows::UI::Xaml::Data::Bindable]
    public ref class MyColor sealed : Windows::UI::Xaml::Data::INotifyPropertyChanged
    {
    public:
        MyColor();
        ~MyColor();

        virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged;
        property Platform::String^ RedValue
        {
            Platform::String^ get()
            { 
                return _redValue;
            }
            void set(Platform::String^ value)
            {
                _redValue = value;
                RaisePropertyChanged("RedValue");
            }
        }

    protected:
        void RaisePropertyChanged(Platform::String^ name);

    private:
        Platform::String^ _redValue;
    };
}

私のcppファイルは次のようになります。

#include "pch.h"
#include "MyColor.h"

using namespace CppDataBinding;

MyColor::MyColor()
{
}

MyColor::~MyColor()
{
}

void MyColor::RaisePropertyChanged(Platform::String^ name)
{
    if (PropertyChanged != nullptr)
    {
        PropertyChanged(this, ref new  Windows::UI::Xaml::Data::PropertyChangedEventArgs(name));
    }
}

トリッキーなことは何もありませんが、コンパイルすると、で定義されていないxamltypeinfo.g.cppことを示すエラーが発生します。MyColorCppDataBinding

関連する生成されたコードは次のようになります。

if (typeName == "CppDataBinding.MyColor")
{
    userType = ref new XamlUserType(this, typeName, GetXamlTypeByName("Object"));
    userType->Activator = ref new XamlTypeInfo::InfoProvider::Activator(
                            []() -> Platform::Object^ 
                            { 
                                return ref new CppDataBinding::MyColor(); 
                            });
    userType->AddMemberName("RedValue", "CppDataBinding.MyColor.RedValue");
    userType->SetIsBindable();
    xamlType = userType;
}

Bindableコードから属性を削除すると、MyColorコンパイルされます。

誰かが私が見逃した目がくらむほど明白なことを教えてくれるので、私は自分自身に顔をしかめ、問題を解決することができますか?

4

1 に答える 1

15

小さな変更を 1 つ加えたところ、動作するようになりました。

追加した

#include "MyColor.h"

BlankPage.xaml.h他の参照をまだ追加していなくても、ファイルにMyColorコンパイルされます。

何かを作成する場合、それが機能するため[Bindable]には、少なくとも 1 つの xaml ページにヘッダーを含める必要があると思います。どこにも参照されていないバインド可能な型は、コンパイラ エラーを引き起こします。

于 2012-03-22T05:36:49.237 に答える