2011-04-21 8 views
3

私のXAMLにTextBlockがあり、そのTextBlockのテキストは、私のviewmodelのプロパティにバインドされています。viewmodelプロパティにバインドされているシルバーライトのテキストブロックのデザインタイム値を指定するにはどうすればよいですか?

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

これは正常に動作しますが、プロパティは解決できないで、テキストは空白であるように、設計時に、何のviewmodelはありません。表示されているテキストが表示されないため、これはデザイナーでは機能しません。

デザイン時に使用するデフォルトテキストを指定するにはどうすればよいですか?

答えて

12

たぶん、あなたはdocumented hereとして

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

を試みることができます。

+0

まさに私が探していたものです。ありがとうございました! –

+0

ようこそ。 – jCoder

+1

ここでのリスクは、何らかの理由でプロパティがNullの場合、実行時にフォールバック値も表示されるということです。シナリオによっては、これは望ましいものではありません。 –

7

Design Time Dataを使用して、ソリューションで豊富なバインディングエクスペリエンスを提供することもできます。それは少しセットアップして実行するのは難しいが、ここに要点がある。

まず、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:

enter image description here

次は、あなたのビューでは、あなたのWiのルートに次の名前空間とプロパティを追加しますndow /ユーザーコントロール:

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

Sourceは、現在のドキュメントに相対的です。だから、あなたのソリューションは、あなたワット

  • ビュー
    • MyUserControl.xaml
  • データ
    • foo.xaml

ように見えた場合odはSource../Data/foo.xamlに設定します。

あなたのViewModelは、設計時にインスタンス化することができるかどうかに応じてDesignDataコンテキストを作成する他の方法は

+0

これは非常に面白いアプローチです。複雑な設計時データにとっては非常に便利です。間違いなくブックマークに値する! – jCoder

0

は別のオプションは、コントロールはVS/Blendでホストされているかどうかを判断するためにDesignerProperties.GetIsInDesignMode機能を使用することであるなど、ありますその場合、偽のDataContextを生成します。Laurent Bugnionは、デザイン時データを作成して使用する方法の例をいくつか提供しています。this post

関連する問題