web-dev-qa-db-ja.com

XAMLエディターでデザイン時のデータバインディングを確認する方法(ランタイムで動作します)?

データバインドされたバージョン番号は、次のように表示されます。

<Window <!-- ... --> DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <TextBlock>
            Version is: 
            <Run Text="{Binding Version, Mode=OneWay}"></Run>
            and advancing...
        </TextBlock>
    </Grid>
</Window>

実行時に動作しています。

Visual Studio 2012のXAMLエディターでデザインタイムに表示するにはどうすればよいですか?私は見るだけ:

Version is: and advancing...

の代わりに:

Version is: 5.2.2 and advancing...

編集-私の解決策:

以下のJureの回答 は動作しますが、 ダミービューモデルの静的コードテクニック を使用することになりました。タイプ:

d:DataContext="{Binding Source={StaticResource DesignViewModel}}" ...
25
Tar

簡単に言えば、あなたはそのようにすることはできません。 VSデザイナーはランタイムコードを実行しておらず、バインディングはデザインタイムに解決されません。ただし、d:DesignData拡張機能による設計時データのサポートがあります。

この方法で設計データコンテキストを設定できます。

<Window xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.Microsoft.com/expression/blend/2008" 
    mc:Ignorable="d" 
    d:DataContext="{d:DesignData Source=/SampleData/SomeSampleData.xaml}"
    DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
    <TextBlock>
        Version is: 
        <Run Text="{Binding Version, Mode=OneWay}"></Run>
        and advancing...
    </TextBlock>
</Grid>

d:DataContext={d:DesignData....は、VSデザイナーサーフェイスのバインディングを解決するために使用される設計時間DataContextを設定します。サンプルデータを含むxamlファイルに設定できます。サンプルxamlファイルは、「DesignData」ビルドアクションでビルドする必要があります。

詳細はこちらをご覧ください: http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/sample-data-in-the-wpf-and-silverlight-designer.aspx

18
jure

Xamlファイルのルートタグ(この場合はWindowタグ)にこれらの定義があることを確認してください。

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.Microsoft.com/expression/blend/2008"
mc:Ignorable="d"

次に、xamlのどこでも(ルートタグを含む)これを追加できます。

d:DataContext="{d:DesignInstance myNamespace:MyViewModel, IsDesignTimeCreatable=True}"

ここで、コンストラクタで値を初期化するか、プロパティのデフォルト値を設定する必要があります。

デザインモード用の特別なロジックを実行する必要がある場合は、 この回答 を参照してください。

44
XAMeLi