C# WPF/MVVM选项卡式设计与维护;避免绑定错误
这是一个关于如何构造MVVM/WPF应用程序的“最佳实践设计”问题 想象一下像Photoshop这样的东西,你有一个编辑器可以打开多个(选项卡式)文档&一个工具箱。每个工具仅设置当前活动文档的属性(如打开过滤器和设置过滤器参数)。我正在使用Actipro的Docking&MDI框架作为选项卡式界面 支持两种类型的文档:称它们为DocSimple&DocComplex,其中DocComplex提供DocSimple的所有可控属性,以及一些附加属性 我现在所做的:C# WPF/MVVM选项卡式设计与维护;避免绑定错误,c#,wpf,mvvm,binding,mdi,C#,Wpf,Mvvm,Binding,Mdi,这是一个关于如何构造MVVM/WPF应用程序的“最佳实践设计”问题 想象一下像Photoshop这样的东西,你有一个编辑器可以打开多个(选项卡式)文档&一个工具箱。每个工具仅设置当前活动文档的属性(如打开过滤器和设置过滤器参数)。我正在使用Actipro的Docking&MDI框架作为选项卡式界面 支持两种类型的文档:称它们为DocSimple&DocComplex,其中DocComplex提供DocSimple的所有可控属性,以及一些附加属性 我现在所做的: 整个应用程序的MainWindo
- 整个应用程序的MainWindow.xaml和MainWindowViewModel(包含停靠容器和工具箱/工具控件)
- MainWindowViewModel具有ActiveDocViewModel属性,该属性指向当前活动文档选项卡的DocSimpleViewModel或DocComplexViewModel实例(如果没有打开文档选项卡,则为“null”)
- 主窗口工具箱中的各种控件都绑定到ActiveDocViewModel的各种属性(即{Binding Path=ActiveDocViewModel.SomeProperty})
public bool IsComplexToolsVisible
{
get
{
return(ActiveDocViewModel != null && ActiveDocViewModel is DocComplexViewModel);
}
}
这与工具箱中该部分的“可见性”有关。同样,它可以按预期的方式工作-但每当我们打开DocSimple时,它也会为复杂工具部分中的每个属性产生“BindingExpression路径错误:'xxx'property not found”错误。通过向DocSimple添加“stub”属性来修复这些问题很容易,但这显然是错误的(当我最终为基类中的所有内容添加stub时,使用继承向“simple”基类添加“复杂”功能有什么意义?)。因此,这些绑定错误的存在让我质疑这种方法是否有缺陷,以及如何在避免所有绑定错误的同时处理复杂与简单的场景
任何见解都将不胜感激:)首先,在我看来,总体结构看起来非常好,但我不是专家,不想给这样的东西打分
然后针对绑定错误的问题: 您可以使用,它为DocSimple类型提供了一个带有“简单工具箱”的模板,以及一个不同的模板,其中包含简单工具箱和DocComplex的其他部分