2012-02-03 64 views
2

我一直在試圖找到一個很好的簡潔的方法來聲明我的ViewModels中的RelayCommands。聲明RelayCommands的最佳/最新的方法

我能想出的最好的是:

public class MyViewModel 
{ 
    public ICommand StopCommand { get; private set; } 

    public MyViewModel() 
    { 
     StopCommand = new RelayCommand(OnStop); 
    } 

    private OnStop(object sender) 
    { 
     //hammertime 
    } 

}

我真的很想做刪除這兩個階段報關/建築,是這樣的:

public class MyViewModel 
{ 
    public readonly ICommand StopCommand = new RelayCommand(OnStop); 

    private OnStop(object sender) 
    { 
     //hammertime 
    } 
} 

但是,這不能編譯與

錯誤CS0236:一個字段初始不能引用非靜態 字段,方法或屬性「MyViewModel.OnStop(對象)」

它有一個整潔/「標準」的方式,人們使用?

+2

我已經使用了您指定的第一種格式,它對我來說工作得很好。 – RQDQ 2012-02-03 14:25:28

回答

3

我已經使用了你指定的第一種格式,它適用於我。

另外 - 如果你使用的是WPF,綁定不能和字段一起工作,所以即使你可以得到第二種編譯方式,它也不會連接到你的UI。

0

我用的是一樣的東西:

public ICommand StopCommand 
{ 
    get{return new RelayCommand(OnStop);} 
} 
+0

是不是一個好主意,使用另一個私人領域,並檢查爲空? – 2012-02-03 18:18:02

1

一個選擇是放棄指揮它有它的侷限性,以及使用其他機制如Caliburn.Micro提供的操作。然後,你只需要你的視圖模型動詞:

public void Save() 
{ 
} 

<Button x:Name="Save">Save</Button>