如何在下面的代码中设置CommandParameter
,使其指向当前选定的项目?
<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>
ViewModel 代码:
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.MouseButtonEventArgs
转换为类型 MadMin。 Model.ServerItem
是不可能的。
最佳答案
您需要使用 RelativeSource Binding
以便从Trigger
内访问TreeView.SelectedItem
属性。尝试为您的 CommandParameter
使用此 Binding
:
CommandParameter="{Binding SelectedItem,
RelativeSource={RelativeSource AncestorType={x:Type TreeView}}}"
关于wpf - TreeViewItem MouseDoubleClick 事件和 MvvmLight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21998502/