我有一个自定义的标记扩展,它使用依赖注入来解析命令。它对我来说非常方便,因为我不必在视图模型和绑定中为它们创建命令。最近有人告诉我,在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}"/>
发布于 2012-01-30 08:21:21
就我个人而言,如果我们以这种一般的方式谈论,就不会看到定制标记注入。我唯一能抱怨的就是你应该删除的复杂性。在XAML
中将它们去掉,可以帮助您和组中的其他开发人员避免造成混乱。
祝好运。
发布于 2012-02-09 09:58:34
我会把它们保存在ViewModel中,这样你就可以测试命令了。MVVM的主要原因是UI的可测试性。应该限制XAML的UI行为、样式和逻辑(例如命令的执行),这些都应该在ViewModel中。
https://stackoverflow.com/questions/9061015
复制相似问题