2016-10-03 56 views
3

我開始使用Xamarin Forms進行移動應用程序跨平臺開發的項目。我使用的MVVM模型,其中我幾乎沒有幾個小WPF應用程序的經驗。高效使用ICommand界面

我使用ICommand接口在視圖的XAML中創建命令並將它們綁定到它們,默認情況下會涉及大量的重複代碼。 Xamarin.Forms提供了一個ICommand的具體子類型Command,用於討論here,我看到了兩種明顯的方法來實例化它們。

選項#1 - 在構造函數中分配命令。

public class Presenter : ObservableObject 
{ 
    public Presenter() 
    { 
     DoStuffCommand = new Command(DoStuff); 
    } 

    public ICommand DoStuffCommand { get; set; } 

    private void DoStuff() 
    { 
     // VM stuff 
    } 

} 

選項#2 - 實例化命令在吸氣

public class Presenter : ObservableObject 
{ 
    public ICommand RunCommand { get { return new Command(DoStuff); } } 

    private void DoStuff() 
    { 
     // VM stuff 
    } 

} 

許多視圖模型將會有許多命令,和途徑#2避免了一個在構造函數中分配所有這些之一 - 當命令動作不會改變時,我更清楚地知道使用ICommand自己聲明瞭這個動作。另一方面,這將在每次命令觸發時創建一個新的命令實例,這顯然比第一種方法效率更低。

有沒有人有這方面的經驗,和/或可以給我一個這是否會顯着影響性能的想法?有沒有一種方法來改善這一點,比如通過手動銷燬Command對象?

謝謝!

回答

2

到選項#2的替代方法是有這方面的支持字段,並確保只實例一次:

private ICommand _doStuffCommand; 
public ICommand DoStuffCommand => 
    _doStuffCommand = _doStuffCommand ?? new Command(DoStuff); 

private void DoStuff() 
{ 

} 
+0

這是偉大的,感謝 - 正是我一直在尋找。驚訝我沒有看到這種模式更經常使用。 – DGoodman

+0

是的,它真的很簡單:) – Cheesebaron