一个ViewModel,多个视图:限制接口对Properties的访问

时间:2014-09-04 08:59:18

标签: c# wpf mvvm binding

我正在尝试在多个视图上共享一个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的访问。

有没有办法解决这个问题,或者这是一个糟糕的模式?

1 个答案:

答案 0 :(得分:0)

而不是解析为基本类型WPF data-binding uses reflection。从MSDN查看此引用:

  

使用Microsoft .NET解析绑定引用   框架反射或ICustomTypeDescriptor。这是三个   解析绑定[...]的对象引用的方法。

也许您的BaseViewModel的方法是implementing ICustomTypeDescriptor on derived classes,而不是使用自定义界面:

  

ICustomTypeDescriptor接口允许对象提供类型   关于自己的信息。通常,此接口在使用时使用   对象需要动态类型信息。相比之下,TypeDescriptor   class提供从元数据[...]

获取的静态类型信息