什么是可组合运行时类?

时间:2018-07-28 15:22:29

标签: windows-runtime midl winrt-component c++-winrt

我正在尝试使用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实现。

1 个答案:

答案 0 :(得分:1)

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

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

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