2011-09-01 117 views
1

我試圖通過viewmodel(MVVM)來控制button_click。我用下面的代碼來創建命令使用viewmodel來控制按鈕點擊

<Button x:Name="GetData" Content="Get Data" Margin="8,8,223,0" VerticalAlignment="Top"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Click"> 
      <cmd:EventToCommand Command="GetData_Click"></cmd:EventToCommand> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</Button> 

被點擊的事件應該返回一個人員列表。

任何人都可以提供我的解決方案:「我們如何在viewmodel中創建命令?」請提供的答案與樣品代碼..提前

感謝名單..

回答

0

如果你有一個視圖模型作爲視圖背後的DataContext,你有你的視圖模型稱爲GetData_Click命令再下面是你怎麼做這樣的:

<Button Command="{Binding Path=GetData_Click"}> 

不過,我有一種感覺GetData_Click是一個功能(通過它的名稱),以便在您的視圖模型,你需要定義一個命令屬性,如:

public ICommand GetDataCommand 
    { 
     get { return (_getDataCommand = _getDataCommand ?? new DelegateCommand(GetData)); } 
    } 

其中GetData是一個函數。簡單的DelegateCommand實現可以在here找到。

0

在視圖模型,你可以寫你的命令(也使用MVVM光工具包)

RelayCommand getDataCommand; 
public RelayCommand GetDataCommand 
{ 
    get 
    { 
     if (getDataCommand == null) 
     { 
      getDataCommand = new RelayCommand(() => 
      { 
       //Here comes the command implementation 
      }); 
     } 
     return getDataCommand; 
    } 
} 

在視圖中,EventToCommand改成這樣:

<cmd:EventToCommand Command={Binding GetDataCommand} /> 
4

如果你使用MVVM光你可以做類似如下的事:

private RelayCommand _getData_Click = null; 
public RelayCommand GetData_Click 
{ 
    get 
    { 
     return _getData_Click ?? _getData_Click = new RelayCommand(
      () => 
      { 
       // Get Person List 
      }); 
    } 
} 

有一個這樣的例子MVVM Lights codeplex page

更新 你可能會得到錯誤,因爲你需要使用數據綁定設置命令,嘗試

<Button x:Name="GetData" Content="Get Data" Margin="8,8,223,0" VerticalAlignment="Top" Command="{Binding Path=GetData_Click}"/> 

或更改EventToCommand聲明:

<cmd:EventToCommand Command={Binding GetDataCommand} /> 

如果您已將ViewModel設置爲DataContext,則應該可以工作。

+0

我試過上述解決方案,但現在我得到以下異常: [AG_E_PARSER_BAD_PROPERTY_VALUE] ..我缺少一些參數? –

+0

更新回答,如果你谷歌那個錯誤,你會看到它與你的XAML有關。 – Fermin

+0

我試過gooogle的答案,但它沒有工作..我得到的eventarguments可能是必需的,但我可以理解在哪裏包括它..任何幫助? –