2

我正在尝试使用 C++/WinRT 创建一个简单的 xaml 应用程序。

我来自 WPF 背景,拥有一个实现 INotifyPropertyChanged 的​​基类并让其他类继承自它是很常见的。

当我尝试对 C++-WinRT 执行相同操作时,我失败并出现错误

error MIDL4006: [msg]A runtime class can derive only from a composable runtime class.

以下是其余相关代码供参考:

ObservableObject.idl:

namespace Example
{
    runtimeclass ObservableObject : Windows.UI.Xaml.DependencyObject, Windows.UI.Xaml.Data.INotifyPropertyChanged
    {
        ObservableObject();
    }
}

MainViewModel.idl:

import "ObservableObject.idl";

namespace Example
{
    runtimeclass MainViewModel : ObservableObject
    {
        MainViewModel();
        Int32 MyProperty;
    }
}

那么究竟什么是可组合的运行时类呢?有没有办法用 C++/WinRT 实现这一点?我真的不想每次定义一个新的可绑定类时都重复 INotifyPropertyChanged 实现。

4

1 回答 1

3

如果继承自DependencyObject,则实际上不需要实现INotifyPropertyChanged,反之亦然(即使在 WPF 中也是如此)。

不建议在 WinRT 类型中继承自定义运行时类,因为 JavaScript 不知道继承,因此 App Cert Kit 在这种情况下会失败。

如果您不想每次都编写相同的逻辑,请声明一个 C++ 本机类并实现接口(不要继承winrt::implement)。让实现类继承它。

于 2018-12-24T03:46:00.763 回答