我在XAML中有一个TextBlock,它的文本被绑定到我的视图模型中的一个属性。
<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty}" />
这个工作得很好,但是在设计时,没有视图模型,所以属性是不可解析的,文本为空。在设计师中难以使用,因为它不显示任何可见文本。
我该如何指定一些在设计时使用的默认文本?
我在XAML中有一个TextBlock,它的文本被绑定到我的视图模型中的一个属性。
<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty}" />
这个工作得很好,但是在设计时,没有视图模型,所以属性是不可解析的,文本为空。在设计师中难以使用,因为它不显示任何可见文本。
我该如何指定一些在设计时使用的默认文本?
也许你可以尝试一下
<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty, FallbackValue='Some other text'}" />
如此处所述。
您也可以使用设计时数据来提供丰富的绑定体验。虽然设置和运行有些麻烦,但以下是要点:
首先,在xaml中创建您的DataContext。将一个新的Xml文档添加到您的解决方案中(根目录是个不错的地方),并将其扩展名设置为.xaml。例如,我们在这个例子中称此文件为“foo.xaml”。
在此文件中,删除所有XML内容,并开始创建您的DataContext类型的实例。例如,如果您的DataContext是一个字符串(非常简单的例子),则该文件将如下所示:
<string xmlns="clr-namespace:System;assembly=mscorlib">LOL!</string>
<ViewModel xmlns="clr-namespace:MyNamespace">
<ViewModel.MyObservableCollection>
<MyModel Name="foo" />
<!-- etc -->
将此文件的生成操作设置为DesignDataWithDesignTimeCreatableTypes:
接下来,在您的视图中,将以下命名空间和属性添加到Window/UserControl的根目录中:
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DataContext="{d:DesignData Source=foo.xaml}"
Source
是相对于当前文档的。因此,如果您的解决方案如下所示:
您将设置Source
为../Data/foo.xaml
。
根据ViewModel在设计时是否可以实例化,创建DesignData上下文的其他方法也有所不同。
null
作为绑定值不会导致显示FallbackValue
(可以使用TargetNullValue
指定空值回退)。 - jCoder