如何为绑定到viewmodel属性的silverlight文本块提供设计时间值?

Mat*_*int 3 data-binding silverlight textblock mvvm

我的XAML中有一个TextBlock,它的文本绑定到我的viewmodel中的属性.

<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty}" />
Run Code Online (Sandbox Code Playgroud)

这工作正常,但在设计时,没有视图模型,因此该属性不可解析且文本为空.这在设计器中很难处理,因为它没有显示可见文本.

如何在设计时指定一些默认文本?

小智 12

也许你可以试试

<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty, FallbackValue='Some other text'}" />
Run Code Online (Sandbox Code Playgroud)

如此处所述.


小智 7

您还可以使用设计时数据在解决方案中提供丰富的绑定体验.它有点难以设置和运行,但这是要点.

首先,在xaml中创建DataContext.将新的Xml文档添加到您的解决方案(根是一个好地方)并为其提供.xaml扩展名.让我们为这个例子调用这个文件"foo.xaml".

在此文件中,删除所有XML并开始创建DataContext类型的实例.例如,如果您的DataContext是一个字符串(非常简单的示例),您的文件将如下所示:

<string xmlns="clr-namespace:System;assembly=mscorlib">LOL!</string>
Run Code Online (Sandbox Code Playgroud)

你可能看起来像

<ViewModel xmlns="clr-namespace:MyNamespace">
    <ViewModel.MyObservableCollection>
         <MyModel Name="foo" />
         <!-- etc -->
Run Code Online (Sandbox Code Playgroud)

将此文件上的Build Action设置为DesignDataWithDesignTimeCreatableTypes:

在此输入图像描述

接下来,在View中,将以下命名空间和属性添加到Window/UserControl的根目录:

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DataContext="{d:DesignData Source=foo.xaml}"
Run Code Online (Sandbox Code Playgroud)

Source是相对于当前文件.所以,如果您的解决方案看起来像

  • 查看
    • MyUserControl.xaml
  • 数据
    • foo.xaml

你会设置Source../Data/foo.xaml.

还有其他方法可以创建DesignData上下文,具体取决于您的ViewModel是否可以在设计时实例化,等等.