【发布时间】:2018-06-15 02:59:24
【问题描述】:
在几个视图中,我们有容器组件——例如Grid 或ScrollViewer——它们绑定到它们自己的 ViewModel 或 ViewModelItem 上的属性。
在某些情况下,包含这些组件的视图(父级)可以在未初始化组件的 ViewModel/ViewModelItem 的情况下显示。为了避免向用户显示空数据网格,我们使用FallBackValue=Hidden 来确保容器仅在其 ViewModel/ViewModelItem 初始化/加载时显示。
一个假设的例子是一个Window 包含一个DataGrid 和右侧更详细的视图。详细视图将是它自己的UserControl 和它自己的 ViewModel,DataGrid 也将有它自己的ViewModel。当打开说Window时,DataGrid的ViewModel会被立即加载——但是由于没有选择行,属于详细视图的ViewModel不会被初始化,这意味着Visibility绑定详细视图将失败并且绑定的FallbackValue 将用于隐藏详细视图。
这种方法的问题在于,Visual Studio WPF/XAML 设计器不会显示受影响容器的内容,因为它们因其 FallbackValue 而被隐藏。
问题:有没有办法让设计器显示将FallBackValue 的Visibility 绑定设置为Hidden 的特定控件/组件?单击这些隐藏容器中的 XAML 代码不会显示它们。
编辑 1
我找到了this 的答案。设置d:IsHidden="false" 没有帮助。无论是在Visibility 属性之前还是之后设置。
【问题讨论】:
-
您是否设置了设计数据上下文?我们可以使用一些代码示例。
xmlns:vm="clr-namespace:VM.ViewModel"然后d:DataContext ="{d:DesignInstance {x:Type vm:YourViewModelNameHere}, IsDesignTimeCreatable=True}" -
@XAMlMAX 哇,这是一个不错的 sn-p,它适用于少数情况!我唯一的问题是,在大多数情况下,ViewModel 的构造函数会调用其他类的方法——由于 MEF——设计者不知道这些方法。
-
我认为 Blend 为您创建 Design Time 实例提供了更大的灵活性,请查看this MSDN post。
-
@XAMlMAX 是的,大约 30 分钟前偶然发现了这个;)。此刻似乎有点压倒性的。我目前的想法是创建特定类型的子类并使用子类型的默认构造函数。哦,您也可以将您的 cmets 重新表述为答案吗?因为这基本上解决了我的问题。
标签: wpf xaml visual-studio-2017 designer