wpf - TreeViewItem MouseDoubleClick 事件和 MvvmLight

标签 wpf mvvm-light

如何在下面的代码中设置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/

相关文章:

c# - MVVM Light for WPF 中的连线 View

c# - 是否可以在 WPF 应用程序中连接到 BTLE 设备?

wpf - 结合 MVVM Light Toolkit 和 Unity 2.0

c# - 将组合框项目源绑定(bind)到这些对象的某些属性

c# - 有没有办法判断窗口的大小是由用户还是以编程方式调整的?

c# - MVVMLight 中的交互性问题

wpf - MVVM Light - 将按钮内容从动态资源更改为绑定(bind)

c# - 如何捕捉键盘输入的 "@"字符

c# - 如何使用触发器更改 TextBlock 的可见性?

wpf - 使用 Gridsplitter 功能排列项目的项目控件