6

私は MVVM の初心者であり、xaml の背後にある単純なコード (VM のテスト容易性など) に対する MVVM の利点のいくつかを理解しています。バインディングの一部を実行するために Caliburn Micro を使用していますが、それは無関係です。特定のバインディング {binding ...} を使用することができ、私の質問は多かれ少なかれ同じままです。

すべてが正しく行われている場合、VM は V について何も知らないはずだというロジックは理解していますが、V と VM の間で動的ランタイム バインディングを使用しているため、コンパイラは各バインディングの正当性をチェックできないようです。表現。たとえば、UserName という UI コンポーネントがある場合、Caliburn はそれを実行時に UserName という VM プロパティにバインドしようとします (Value="{binding UserName}" のようなことを行うのと同様)。ただし、VM プロパティの名前を変更したり、UI コンポーネント名またはバインド式のスペルを間違えたりすると、実行時まで問題が示されません。

UI コンポーネントまたはページが特定のインターフェイスにバインドされることを xaml に伝えることができれば、それ以外の場合は実行する必要がある作業の一部をコンパイラが実行できるようになると非常に便利だと思います (そしてやり直し)テスト部門によって(そしてそれは私がかなり頻繁に)。

インターフェイスまたはオブジェクト タイプにバインドしていることを xaml に伝える方法はありますか? バインディングを検証するために xaml アプリケーションにプラグインできるツールはありますか?

4

4 に答える 4

4

コンパイラは XAML のコンパイル時チェックをサポートしていませんが、XAMLReaderクラスを介して各 XAML ファイルをインスタンス化するカスタム ビルド タスクを作成し、カスタム TraceListenerを使用してバインド エラーをリッスンすることで、ほぼ同じ結果を得ることができます。

さらに、コードを使用してデータバインディングを行う準備ができている場合は、プロパティ名を直接参照するバインディングを作成できます。次のようなもの(未テスト)

Binding createBinding<TProperty>(Expression<Func<TProperty>> property, object source)
{
    MemberExpression me = property.Body as MemberExpression;
    if (me == null || me.Expression != property.Parameters[0]
          || me.Member.MemberType != MemberTypes.Property) {
        throw new InvalidOperationException(
            "Now tell me about the property");
    }
    Binding b = new Binding(me.Member.Name);
    b.Source = source;

    return b;
}

// sample code
Binding b = createBinding(()=>this.FontSize, this);
textBlock1.SetBinding(TextBlock.FontSizeProperty, b);
于 2012-09-10T11:32:53.767 に答える
2

この投稿では、バインディングでマジック ストリングを削除する方法の簡潔な例を示します。コンパイル時の型チェックは行いませんが、少なくともコンパイラはスペルミスを検出します。

Wpf Binding Path={x:Static <propertypath>} のパフォーマンスへの影響?

于 2012-11-06T15:29:46.437 に答える
0

「バインドを検証するために xaml アプリケーションにプラグインできるツールはありますか?」と尋ねます。

はい、Snoop実行時に不適切なバインドを検出するために使用できます。コンパイル時間ではありませんが、同じくらい効果的です。

詳細な手順についてはSolution 8ReSharper WPF エラー: "不明な DataContext のため、シンボル "MyVariable" を解決できません" を参照してください

于 2015-06-27T23:55:23.600 に答える
-1

実行時に出力ウィンドウでバインディング エラーを探すことで、バインディングが失敗したかどうかを簡単に確認できます。詳細にバインドするためのデバッグ情報を設定する必要がある場合があります。

于 2012-09-10T10:53:37.607 に答える