2011-09-18 37 views
0

我試圖在我寫的一些silverlight模式中使用MVVM - 我寫了視圖 - 和視圖模型部分 - 但我需要在它們之間做出命令,我不知道該怎麼做。如何在silverlight MVVM中建立命令連接?

在視圖中我有單個按鈕,將啓動該命令。

怎麼辦?

感謝您的幫助。

+1

看指揮:ICommand的,ApplicationCommands,... http://msdn.microsoft.com/en-us/library/ ms752308.aspx – kenny

回答

2

在View模型

private RelayCommand _Command; 
public RelayCommand Command 
{ 
    get 
    { 
    if (_Command == null) 
    { 
     _Command= new RelayCommand(() => 
     { 
     }); 
    } 
    return _Command; 
    } 
    private set { } 
} 

使用的參數

private RelayCommand<string> _Command; 
public RelayCommand<string> Command 
{ 
    get 
    { 
    if (_Command == null) 
    { 
     _Command= new RelayCommand<string>((X) => 
     { 
     }); 
    } 
    return _Command; 
    } 
    private set { } 
} 

在View

的xmlns:ⅰ=「CLR-名稱空間:System.Windows.Interactivity;裝配= System.Windows。交互性「 xmlns:gs_cmd =」clr-namespace:GalaSoft.MvvmLight.Command; assembly = GalaSoft.MvvmLight.Extras.SL4「

<Button Grid.Row="1" Grid.Column="1" Margin="4" HorizontalAlignment="Right" Name="btnSelect" Content="..." Width="25" Height="25" TabIndex="2"> 
             <i:Interaction.Triggers> 
              <i:EventTrigger EventName="Click"> 
               <gs_cmd:EventToCommand Command="{Binding Path=Command,Mode=OneWay}"/> 
              </i:EventTrigger> 
             </i:Interaction.Triggers> 
            </Button> 
+0

ICommand設置的優點是您也可以傳遞ViewModel實例。因此,RelayCommand ((x)...可以用RelayCommand ((vm)...替代),它使您可以直接訪問被調用方法中的ViewModel實例,這是更新程序中其他元素的一種方法在視圖中發生了一些重要的事情,例如 – EtherDragon

+0

RealyCommand在你的ViewModel中定義你可以改變ViewModel屬性,使用這個代碼發送參數到viewmodel Masoomian

0

另一個版本的參數,添加到Masoomian的雁:

private RelayCommand<MyViewModel> _Command; 
public RelayCommand<MyViewModel> Command 
{ 
    get 
    { 
    if (_Command == null) 
    { 
     _Command= new RelayCommand<MyViewModel>((vm) => 
     { 
     vm.IsBusy = true; // Set a Parameter 
     vm.DoSomething(); // Do some work 
     // Call other methods on the View Model as needed 
     // ... 
     }); 
    } 
    return _Command; 
    } 
    private set { } 
}