Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个视图模型,多个视图:通过接口限制对属性的访问_C#_Wpf_Mvvm_Binding - Fatal编程技术网

C# 一个视图模型,多个视图:通过接口限制对属性的访问

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 {

我试图在多个视图上共享一个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中定义的每个属性的访问

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

而不是解析为基类型。请从MSDN中查看此报价:

绑定引用通过使用Microsoft.NET或 框架反射或ICustomTypeDescriptor。这里有三个 用于解析绑定[…]的对象引用的方法

可能一种方法是使用BaseViewModel,而不是使用自定义接口:

ICustomTypeDescriptor接口允许对象提供类型 关于自身的信息。通常,当 对象需要动态类型信息。相反,类型描述符 类提供从元数据[…]获取的静态类型信息


与其解析为基类,还不如使用反射来处理绑定,因此您施加的任何基于类型的限制都是无用的。因此,没有办法限制访问,我总是必须公开基类的每个属性?谢谢,我宁愿坚持使用单个ViewModel实现或公开所有功能,因为我觉得,这种努力不值得隐藏属性的好处。@flix可能,你知道,我们这样做是为了设计好的设计,但有时我们需要限制我们的期望,使其适应实际问题……哈哈,你是对的。我会投票支持这一点,但不幸的是我没有分数。再次感谢。