3

依存性注入を使用してコマンドを解決するカスタムマークアップ拡張機能があります。ビューモデルでコマンドを作成したり、それらのバインディングを作成したりする必要がないため、非常に便利です。最近、このようなマークアップ拡張機能を使用することはmvvmでの良い習慣ではないと言われましたが、それは避けるべきです。本当?

マークアップ拡張のコード:

public class InjectCommandExtension : MarkupExtension
{
    #region Props
    [ConstructorArgument("key")]
    public string Key { get; set; }
    #endregion

    #region ctor
    public InjectCommandExtension()
    {
    }

    public InjectCommandExtension(string key)
    {
        Key = key;
    }
    #endregion

    #region ProvideValue
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        if (Key == null)
            throw new ArgumentNullException("Key");

        return ServiceLocator.Current.GetInstance<ICommand>(Key);
    }
    #endregion
}

XAMLでの使用:

<Button Content="Delete" Command="{mext:InjectCommand DeleteOrderCommand}"/>
4

2 に答える 2

0

この一般的な方法で言えば、カスタムマークアップインジェクションについて個人的にはわかりません。私が癌になることができる唯一のことは、あなたがデラするべき複雑さです。それらをデカールするXAML ことで、混乱を避けるためにあなたやグループ内の他の開発者を助けます。

幸運を。

于 2012-01-30T08:21:21.413 に答える
0

コマンドをテストできるように、それらをViewModelに保持します。MVVM の主な理由は、UI のテスト容易性です。XAML は、UI の動作とスタイルおよびロジック (コマンドの実行など) に対して制限する必要があり、ViewModel に含める必要があります。

于 2012-02-09T09:58:33.730 に答える