2012-01-30 76 views
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}"/> 
+2

你能告訴我們一些代碼從你的viewmodel和xaml。我真的很感興趣,看看他們是如何連接。 – blindmeis 2012-01-30 13:55:04

+0

你在何時何地進行注射?這將影響它是否是好的做法。 – 2012-01-30 14:36:48

回答

0

個人不看,如果我們在這個普遍的方式說話,關於自定義標記注入。 我可以忍受的唯一事情就是你應該忍受的複雜性。讓他們在XAML中進行decalred幫助您和小組中的其他開發人員避免造成混亂。

祝你好運。

0

我會讓他們在ViewModel中,這樣你可以測試命令。 MVVM的主要原因是UI的可測試性。 XAML應該受限於UI行爲和樣式和邏輯(如執行命令),應該位於ViewModel中。

相關問題