Bre*_*aut 2 visual-c++ windows-8 windows-runtime c++-cx
我想为我的所有视图模型创建一个抽象基类,但是我遇到了可访问性问题,似乎无法浏览错误.这是我的代码示例:
public ref class ViewModelBase {
...
}
public ref class OtherViewModel : ViewModelBase {
...
}
Run Code Online (Sandbox Code Playgroud)
当我将代码定义为上面的状态时,我收到以下错误:
错误C4585:'MyNamespace :: ViewModelBase':WinRT'公共引用类'必须被密封或从现有的未密封类派生
相反,如果我将ViewModelBase设为私有,则会出现此错误:
错误C3213:基类'MyNamespace :: ViewModelBase'比'OtherViewModel'更难访问
这看起来应该非常简单.我究竟做错了什么?
在C++/CX中,您所尝试的内容并不严格,因为在VS 2012中,C++/CX不支持通用方案的公共类继承.仅支持XAML场景才能工作; 唯一可能的公开未密封类型是在Windows::UI::Xaml命名空间下找到的类型,用户无法创建自己的公开未密封类型.
如果您希望为所有视图模型都有一个基类,那么您唯一的选择就是将所有类设为私有或从基类继承Windows::UI::Xaml(例如DependencyObject).
这些方法中的每一种都有缺点:
[Bindable]属性进行数据绑定,因此您需要具有私有数据绑定实现.(您的私有类需要实现ICustomPropertyProvider和相关的接口.)