Как отобразить значение placeholder в WPF Visual Studio Designer, пока не будет загружено реальное значение

Я опытный разработчик С#, но новичок в WPF. Основной вопрос (я думаю), что я не могу найти ответ на поиск в Интернете. Здесь упрощенный пример использования...

Я хочу показать строку в текстовом блоке WPF. Поэтому я пишу код С# в codebehind моего элемента управления XAML...

public class MyCoolControl : UserControl
{
   public void InitializeMyCoolControl()
   {
      this.DataContext = "SomeStringOnlyAvailableAtRuntime"; // Perhaps from a database or something...
   }
}

И я установил свой XAML следующим образом:

<UserControl ... snip...>
   <!-- Bind the textblock to whatever in the DataContext -->
   <TextBlock Text="{Binding}"></TextBlock>
</UserControl>

Отлично работает, я могу увидеть значение "SomeStringOnlyAvailableAtRuntime" при выполнении моего приложения. Тем не менее, я ничего не вижу в Design Time, используя Visual Studio 2008 XAML Designer.

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

Спасибо!

-Mike

Ответ 1

Я часто использую FallbackValue для привязки, чтобы иметь возможность посмотреть, когда я создаю пользовательские элементы управления. Например:

<TextBlock Text={Binding Path=AverageValue, FallbackValue=99.99} />

Однако, поскольку FallbackValue применяется не только во время разработки, это может оказаться неприемлемым, если вы хотите использовать FallbackValue во время выполнения по другим причинам.

Ответ 2

В вашем примере вам может потребоваться использовать TargetNullValue, а не FallbackValue, поскольку выражение привязки, вероятно, будет null, поскольку DataContext - null во время разработки.

FallbackValue используется, если Path, указанный в привязке, не существует, но поскольку путь не указан, я бы предположил, что DataContext будет оцениваться как null.

<UserControl ... snip...>
  <!-- Bind the textblock to whatever in the DataContext -->   
    <TextBlock Text="{Binding TargetNullValue=Nothing to see}"></TextBlock>
</UserControl>

Также обратите внимание, что .NET Framework 3.5 SP1 необходим, поскольку эти два дополнительных свойства были добавлены в SP1.

Ответ 3

Я не знаю, как это сделать с редактором Visual Studio, но вы можете сделать это с помощью Expression Blend.

Вот и статья, описывающая, как достичь этого.

Я надеюсь, что MS объединит функциональность Blend и Visual Studio вместе, потому что один пакет делает одно, а другое - немного глупо. Особенно, когда они из одной компании.

Ответ 4

Не лучший вариант в этом сценарии, чтобы объект MultiValueConverter или ViewModel обрабатывал загрузку объекта и обновлял свойство зависимостей для вас?