2017-09-08 84 views
2

這是我試過到目前爲止:如何將網格手勢鏈接到視圖模型命令?

<Grid x:Name="wordGrid" Padding="10,0,10,0"> 
    <Grid.GestureRecognizers> 
     <TapGestureRecognizer Command="{Binding wordGridClickedCommand}" /> 
    </Grid.GestureRecognizers> 

在視圖模型:

public class PhrasesFrameViewModel : ObservableProperty 
{ 

    public PhrasesFrameViewModel() 
    { 
     var wordGridClickedCommand = new Command(() => 
     { 
      if (App.Timer1Running) 
       ResetTimer1(); 
      else 
       ResetTimer2(); 
     }); 
    } 

當我把一個斷點,當我對電網挖掘沒有得到達到該命令。

如果我可能做錯了,我將不勝感激。

感謝

回答

2

Binding只適用於properties

您可以在視圖模型公開屬性爲:

private ICommand wordGridClickedCommand; 
pubilc ICommand WordGridClickedCommand 
{ 
    get { return wordGridClickedCommand; } 
    set 
    { 
     wordGridClickedCommand = value; 
     OnPropertyChanged(); 
    } 
} 

,並確保在XAML更新到WordGridClickedCommand綁定路徑。

EDIT-1

或者你可以使用:

private ICommand wordGridClickedCommand; 
pubilc ICommand WordGridClickedCommand 
{ 
    get 
    { 
     return wordGridClickedCommand ?? 
      (wordGridClickedCommand = new Command(() => 
      { 
       if (App.Timer1Running) 
        ResetTimer1(); 
       else 
        ResetTimer2(); 
      })); 
    } 
} 
+0

難道我也只是把wordGridClickedCommand代碼返回之後或內部得到什麼?另外,如果不是那麼wordGridClickedCommand代碼應該在構造函數內嗎? – Alan2

+1

您仍然可以將處理程序代碼保存在構造函數中,或將其移至getter。但是如果你把它移動到 - 在設置命令之前記住做一個空檢查 - 沿着'wordGridClickedCommand = wordGridClickedCommand?新命令(..'; – Ada

+0

)如果你有幾分鐘的時間,你可以舉一個例子來說明它是如何被編碼的,謝謝 – Alan2

相關問題