Как указать значение времени проектирования для текстового блока silverlight, связанного со свойством viewmodel? - PullRequest
3 голосов
/ 21 апреля 2011

В моем XAML есть TextBlock, текст которого привязан к свойству в моей модели представления.

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

Это прекрасно работает, но во время разработки модель представления отсутствует, поэтому свойство неразрешимо, а текст пуст. С этим трудно работать в конструкторе, поскольку он не отображает видимый текст.

Как мне указать текст по умолчанию для использования во время разработки?

Ответы [ 3 ]

12 голосов
/ 21 апреля 2011

Может быть, вы могли бы попробовать

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

как задокументировано здесь .

7 голосов
/ 21 апреля 2011

Вы также можете использовать Данные времени проектирования , чтобы обеспечить богатое взаимодействие в вашем решении.Его немного сложно настроить и запустить, но вот суть.

Во-первых, вы создаете свой DataContext в xaml.Добавьте новый 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:

enter image description here

Затем в вашем представлении добавьте следующие пространства имен и свойства в корень вашего Window / UserControl:

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

Source относительно текущего документа.Итак, если ваше решение выглядело как

  • Просмотры
    • MyUserControl.xaml
  • Данные
    • foo.xaml

вы бы установили Source на ../Data/foo.xaml.

Существуют и другие способы создания контекста DesignData в зависимости от того, можно ли создать экземпляр ViewModel при проектированиивремя и т. д.

0 голосов
/ 22 апреля 2011

Другой вариант - использовать функцию DesignerProperties.GetIsInDesignMode , чтобы определить, размещен ли элемент управления в VS / Blend, и в этом случае сгенерировать поддельный DataContext. Лоран Бюньон приводит ряд примеров того, как создавать и использовать данные времени разработки в этой публикации

...