2010-11-30 4 views
4

私のバインドされたコンテンツは、UIデザインモードでempty文字列として表示されます。私はそれらの内容についていくつかの偽造された価値を表示したいが、私はどのようにするべきかわからない。WPFデザインモードでバウンドプロパティを表示するための値を設定する方法はありますか?

あなたが知っている場合は分かち合ってください。ありがとうございました!

答えて

7
は、

Visual Studio 2010でデザインタイムデータを取得する簡単な方法は、デザインデータインターフェイスを使用することです。 DataContextの場合、d:DataContextはデザインモードで使用され、StaticResourceは実行時に使用されます。また、別のViewModelをデザインに使用することもできますが、この例では両方に同じViewModelを使用します。

<Window ... 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:DesignTimeData" 
     mc:Ignorable="d"    
     d:DataContext="{d:DesignInstance local:MyViewModel, 
         IsDesignTimeCreatable=True}"> 
    <Window.Resources> 
     <local:MyViewModel x:Key="MyViewModel" /> 
    </Window.Resources> 
    <Window.DataContext> 
     <StaticResource ResourceKey="MyViewModel"/> 
    </Window.DataContext> 
    <StackPanel> 
     <TextBox Text="{Binding MyText}" 
       Width="75" 
       Height="25" 
       Margin="6"/> 
    </StackPanel> 
</Window> 

ViewModelsプロパティMyTextでは、デザインモードになっているかどうかを確認します。その場合、別のものが返されます。 here発見された

public class MyViewModel : INotifyPropertyChanged 
{ 
    public MyViewModel() 
    { 
     MyText = "Runtime-Text"; 
    } 

    private string m_myText; 
    public string MyText 
    { 
     get 
     { 
      // Or you can use 
      // DesignerProperties.GetIsInDesignMode(this) 
      if (Designer.IsDesignMode) 
      { 
       return "Design-Text"; 
      } 
      return m_myText; 
     } 
     set 
     { 
      m_myText = value; 
      OnPropertyChanged("MyText"); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

Designer.cs、この

public static class Designer 
{ 
    private static readonly bool isDesignMode; 
    public static bool IsDesignMode 
    { 
     get { return isDesignMode; } 
    } 
    static Designer() 
    { 
     DependencyProperty prop = 
      DesignerProperties.IsInDesignModeProperty; 
     isDesignMode = 
      (bool)DependencyPropertyDescriptor. 
       FromProperty(prop, typeof(FrameworkElement)) 
         .Metadata.DefaultValue; 
    } 
} 
-3

コンテンツを別のプロパティにラップして、値が空であるかどうかをテストできます。その場合、必要な偽の値を返します。

private string _content; 
public string Content 
{ 
    get 
    { 
     if (_content != "") return _content; 
     else return "FAKE"; 
    } 
    set { _content= value; } 
} 
+0

実行時に同じことはしませんか? – Jens

+0

@Guy:回答を受け入れるには別の回答で回答を投稿してください。 –

+0

あなたの提案が私のために働いているとは思わない:(実行時に "FAKE"が値を置き換える - これは期待していない! –

3

のようなあなたにも設計時に何かを表示するFallbackValueプロパティを使用することができます見えます。しかし、バインディングが失敗した場合、これも実行時の値になります。

<TextBox Text="{Binding MyText, FallbackValue='My Fallback Text'}"/>