我正在尝试在多个视图上共享一个BaseViewModel。 因此,我希望ViewModel实现不同的接口,每个View一个。
public class BaseViewModel : IBaseViewModelTypeI, IBaseViewModelTypeII {
public PropertyI { get; set; }
public PropertyII { get; set; }
}
public interface IBaseViewModelTypeI {
PropertyI { get; set; }
}
public interface IBaseViewModelTypeII {
PropertyII { get; set; }
}
在我的视图中,我想将ViewModel设置为DataContext,并仅将在Interface中实现的属性公开为可绑定属性。
但WPF似乎解析为我的BaseViewModel的BaseType,因此暴露了对我的BaseViewModel中定义的每个Property的访问。
有没有办法解决这个问题,或者这是一个糟糕的模式?
答案 0 :(得分:0)
而不是解析为基本类型,WPF data-binding uses reflection。从MSDN查看此引用:
使用Microsoft .NET解析绑定引用 框架反射或ICustomTypeDescriptor。这是三个 解析绑定[...]的对象引用的方法。
也许您的BaseViewModel
的方法是implementing ICustomTypeDescriptor
on derived classes,而不是使用自定义界面:
ICustomTypeDescriptor接口允许对象提供类型 关于自己的信息。通常,此接口在使用时使用 对象需要动态类型信息。相比之下,TypeDescriptor class提供从元数据[...]
获取的静态类型信息