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