我有一个自定义的标记扩展,它使用依赖注入来解析命令。这对我非常方便,因为我不必在视图模型中创建命令和绑定它们。
最近有人告诉我,在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}"/>