C# 一个视图模型,多个视图:通过接口限制对属性的访问
我试图在多个视图上共享一个BaseViewModel。 因此,我希望ViewModel实现不同的接口,每个视图一个接口C# 一个视图模型,多个视图:通过接口限制对属性的访问,c#,wpf,mvvm,binding,C#,Wpf,Mvvm,Binding,我试图在多个视图上共享一个BaseViewModel。 因此,我希望ViewModel实现不同的接口,每个视图一个接口 public class BaseViewModel : IBaseViewModelTypeI, IBaseViewModelTypeII { public PropertyI { get; set; } public PropertyII { get; set; } } public interface IBaseViewModelTypeI {
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中定义的每个属性的访问
有没有办法解决这个问题,或者这是一个糟糕的模式?而不是解析为基类型。请从MSDN中查看此报价:
绑定引用通过使用Microsoft.NET或
框架反射或ICustomTypeDescriptor。这里有三个
用于解析绑定[…]的对象引用的方法
可能一种方法是使用BaseViewModel,而不是使用自定义接口:
ICustomTypeDescriptor接口允许对象提供类型
关于自身的信息。通常,当
对象需要动态类型信息。相反,类型描述符
类提供从元数据[…]获取的静态类型信息
与其解析为基类,还不如使用反射来处理绑定,因此您施加的任何基于类型的限制都是无用的。因此,没有办法限制访问,我总是必须公开基类的每个属性?谢谢,我宁愿坚持使用单个ViewModel实现或公开所有功能,因为我觉得,这种努力不值得隐藏属性的好处。@flix可能,你知道,我们这样做是为了设计好的设计,但有时我们需要限制我们的期望,使其适应实际问题……哈哈,你是对的。我会投票支持这一点,但不幸的是我没有分数。再次感谢。