我正在尝试使用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实现。
发布于 2018-12-24 03:46:00
如果从DependencyObject继承,实际上不需要实现INotifyPropertyChanged,反之亦然(即使在WPF中)。
在WinRT类型中不建议继承自定义runtimeclass,因为JavaScript不知道继承,因此App在这种情况下将失败。
如果您不想每次编写相同的逻辑,那么声明一个C++原生类并实现接口(不要继承winrt::implement)。让实现类继承它。
https://stackoverflow.com/questions/51572715
复制相似问题