2014-02-24 105 views
2

如何在下面的代碼中設置CommandParameter,以便它指向當前選定的項目?TreeViewItem MouseDoubleClick事件和MvvmLight

<TreeView Grid.Column="0" HorizontalAlignment="Stretch" DockPanel.Dock="Left" ItemsSource="{Binding Path=ServerItems, UpdateSourceTrigger=PropertyChanged}"> 
<i:Interaction.Triggers> 
    <i:EventTrigger EventName="MouseDoubleClick"> 
     <cmd:EventToCommand Command="{Binding ConnectServer}" PassEventArgsToCommand="True" CommandParameter="{Binding SelectedItem}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 
<TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding Databases}"> 
     <TextBlock Text="{Binding}" /> 
    </HierarchicalDataTemplate> 
</TreeView.ItemTemplate> 

視圖模型代碼:

public RelayCommand<ServerItem> ConnectServer { 
    get; 
    private set; 
} 

ConnectServer = new RelayCommand<ServerItem>(param => ConnectToServer(param)); 

public void ConnectToServer(ServerItem item) { 
    MessageBox.Show(item.ToString()); 
} 

代碼執行不得到ConnectToServer方法,因爲會拋出異常,告訴我,從鑄造到System.Windows.Input.MouseButtonEventArgsMadMin.Model.ServerItem是不可能的。

+0

大約只是'CommandParameter = 「{結合的SelectedItem}」'怎麼辦?那是什麼回報? – Sheridan

+0

請查看我編輯的問題。 –

+0

好的,那麼'CommandParameter =「{Binding SelectedItem,RelativeSource = {RelativeSource AncestorType = {x:Type TreeView}}}''? – Sheridan

回答

2

你需要爲了從Trigger內到達TreeView.SelectedItem財產使用RelativeSource Binding。試試這個BindingCommandParameter代替:

CommandParameter="{Binding SelectedItem, 
    RelativeSource={RelativeSource AncestorType={x:Type TreeView}}}" 
+0

還有一個問題 - 我在我的「TreeView」 - 「ServerItem」和「DatabaseItem」(一個包含另一個)中有兩種類型的模型。如果我使用上面的代碼,那麼如果我雙擊'DatabaseItem',我的'ConnectToServer'方法將被調用。有什麼建議? –

0
{Binding SelectedItem, RelativeSource={RelativeSource Self}} 
+0

我得到'MouseButtonEventArgs'而不是selecteditem。 –

相關問題