2009-03-29 10 views
11

私は経験豊富なC#開発者ですが、WPF初心者です。基本的な質問(私は思う)私はWeb検索で答えを見つけることができません。ここでは単純化されたユースケースです...WPF Visual Studio Designerでプレースホルダの値を実際の値をロードするまで表示する方法

WPF TextBlockに文字列を表示したいとします。だから私は...私のXAMLコントロールの分離コードでいくつかのC#コードを記述

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

そして、私はこのように私のXAMLを設定します。

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

は素晴らしい作品、私は時に値「SomeStringOnlyAvailableAtRuntime」を見ることができます私は自分のアプリケーションを実行する。ただし、Visual Studio 2008のXAMLデザイナを使用してデザインタイムに何も表示されません。

デザイン時にテキストブロックのプレースホルダの値(何か)を確認するにはどうすればよいですか?

ありがとうございます!

答えて

17

私はしばしば、ユーザーコントロールを設計している間に何かを見るためにバインディングにFallbackValueを使用します。たとえば:あなたは他の理由のために、実行時にFallbackValueを使用したい場合は

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

しかし、FallbackValue以来、ちょうど設計時に適用されていない、これは適切ではないかもしれません。 DataContextデザイン時にnullであるとして、あなたの例では

0

-Mike

私は、Visual Studioのエディタでこれを行う方法を知りませんが、あなたはExpression Blendのでこれを行うことができます。

Here'sとこれを実現する方法を説明する記事。

私は、MSがブレンドとVisual Studioの機能を併合することを望んでいます。一つのパッケージには一つのことがあり、別のものは少しばかだからです。特に彼らが同じ会社から来たとき。

2

あなたはバインディング式としてTargetNullValue、ないFallbackValueを使用する必要があるかもしれませんがnullである可能性が高いです。結合で与えられたPathが存在していませんが、パスが指定されていないとして、私はDataContextが、その後nullとして評価されるだろうと仮定したい場合

FallBackValueが使用されています。

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

また、これら2つの追加プロパティがSP1で追加されたため、.NET Framework 3.5 SP1が必要です。

+0

FallbackValueが機能しているようです。なぜなのかご存知ですか? –

0

このシナリオでは、MultiValueConverterまたはViewModelオブジェクトがオブジェクトを処理し、依存関係プロパティを更新する最適なオプションはありませんか?

+0

私は理解していますか、あなたはもう少し説明できますか? – Mike

+0

状態依存のリソースに直接データバインディングするのではなく、前記リソースのロードを担当するオブジェクトにバインドします。 XAMLが最初に読み込まれると、リソースは存在せず、バインディングは空のイメージ、または「読み込み中...」というオブジェクトを返します。ロードが完了したら、INotifyPropertyChangedの実装は、リソースがロードされたバージョンに変更されたことをデータバインディングに通知する必要があります。 このシナリオでは、操作全体をインラインで宣言できるように、ローダータイプのMarkup Extensionをオーサリングする価値があります。 – Gusdor

関連する問題