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

发布于 2024-11-02 17:59:04 字数 238 浏览 1 评论 0原文

我的 XAML 中有一个 TextBlock,其文本绑定到我的视图模型中的属性。

<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty}" />

这工作正常,但在设计时,没有视图模型,因此该属性无法解析并且文本为空白。这在设计器中很难使用,因为它不显示可见的文本。

如何指定设计时使用的一些默认文本?

I have a TextBlock in my XAML that has its text bound to a property in my viewmodel.

<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty}" />

This works fine, but at design time, there is no viewmodel so the property is unresolvable and the text is blank. This is hard to work with in the designer because it shows no visible text.

How can I specify some default text to use at design time?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

呆° 2024-11-09 17:59:04

也许你可以尝试

<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty, FallbackValue='Some other text'}" />

Maybe you could try

<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty, FallbackValue='Some other text'}" />

as documented here.

微暖i 2024-11-09 17:59:04

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

首先,在 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 相对于当前文档。所以,如果你的解决方案看起来像

  • Views
    • MyUserControl.xaml
  • 数据
    • foo.xaml

您可以将Source 设置为../Data/foo.xaml

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

You can also use Design Time Data to provide a rich binding experience in your solution. Its a little hard to set up and get running, but here's the gist.

First, you create your DataContext in xaml. Add a new Xml document to your solution (the root is a good place) and give it an .xaml extension. Lets call this file "foo.xaml" for this example.

In this file, remove all of the XML and start creating an instance of your DataContext type. For example, if your DataContext was a string (very simple example) your file would look like the following:

<string xmlns="clr-namespace:System;assembly=mscorlib">LOL!</string>

You might have yours look like

<ViewModel xmlns="clr-namespace:MyNamespace">
    <ViewModel.MyObservableCollection>
         <MyModel Name="foo" />
         <!-- etc -->

Set the Build Action on this file to DesignDataWithDesignTimeCreatableTypes:

enter image description here

Next, in your View, add the following namespaces and properties to the root of your Window/UserControl:

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DataContext="{d:DesignData Source=foo.xaml}"

Source is relative to the current document. So, if your solution looked like

  • Views
    • MyUserControl.xaml
  • Data
    • foo.xaml

you would set the Source to ../Data/foo.xaml.

There are other ways to create a DesignData context depending on whether your ViewModel can be instantiated at design time, etc.

另类 2024-11-09 17:59:04

另一种选择是使用 DesignerProperties.GetIsInDesignMode函数来确定控件是否托管在 VS/Blend 中,并在这种情况下生成假 DataContext。 Laurent Bugnion 在此中提供了许多有关如何创建和使用设计时数据的示例帖子

Another option is to use the DesignerProperties.GetIsInDesignMode function to determine if the control is hosted in VS/Blend and Generate a fake DataContext in that case. Laurent Bugnion provides a number of examples of how to create and use design-time data in this post

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文