一个ViewModel,多个视图:按接口限制对属性的访问
本文关键字:属性 访问 接口 ViewModel 视图 一个 | 更新日期: 2023-09-27 18:20:47
我正试图在多个视图上共享一个BaseViewModel。因此,我想让ViewModel实现不同的接口,每个视图一个。
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,并仅将接口中实现的属性公开为可绑定属性。
但WPF似乎解析为BaseViewModel的BaseType,因此公开了对BaseViewModel中定义的每个属性的访问。
有没有办法解决这个问题,或者这是一个糟糕的模式?
WPF数据绑定使用反射,而不是解析为基类型。查看MSDN上的报价:
绑定引用是通过使用Microsoft.NET解析的框架反射或ICustomTypeDescriptor。这里有三个解析绑定的对象引用的方法〔…〕.
也许一种方法是在BaseViewModel
的派生类上实现ICustomTypeDescriptor
,而不是使用自定义接口:
ICustomTypeDescriptor接口允许对象提供类型关于自身的信息。通常,当对象需要动态类型信息。相反,TypeDescriptor类提供从元数据中获得的静态类型信息〔…〕