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

我会将它们保留在 ViewModel 中,这样您就可以测试命令。MVVM 的主要原因是 UI 的可测试性。XAML 应该针对 UI 行为、样式和逻辑(例如命令的执行)进行限制,应该在 ViewModel 中。

于 2012-02-09T09:58:33.730 回答
0

如果我们以这种笼统的方式谈论自定义标记注入,我个人并不认为。我唯一能想到的就是你应该处理的复杂性。将它们贴在标签上XAML 可以帮助您和小组中的其他开发人员避免造成混乱。

祝你好运。

于 2012-01-30T08:21:21.413 回答