Похоже, что у вас нет обработчика событий во втором представлении (и поэтому не рекомендуется использовать код позади).
Я знаю, вы сказали, что TreeView не имеет команды двойного щелчка, но это не может помешать нам создать ее для себя.
Вот базовый класс, который я написал, чтобы представить DoubleClickCommand любому элементу Framework
public class DoubleClickCommand
{
public static object GetDoubleClickParameter(DependencyObject obj)
{
return (object)obj.GetValue(DoubleClickParameterProperty);
}
public static void SetDoubleClickParameter(DependencyObject obj, object value)
{
obj.SetValue(DoubleClickParameterProperty, value);
}
public static ICommand GetDoubleClickCommand(DependencyObject obj)
{
return (ICommand)obj.GetValue(DoubleClickCommandProperty);
}
public static void SetDoubleClickCommand(DependencyObject obj, ICommand value)
{
obj.SetValue(DoubleClickCommandProperty, value);
}
public static readonly DependencyProperty DoubleClickParameterProperty = DependencyProperty.RegisterAttached("DoubleClickParameter", typeof(object), typeof(DoubleClickCommand), new UIPropertyMetadata(null));
public static readonly DependencyProperty DoubleClickCommandProperty = DependencyProperty.RegisterAttached("DoubleClickCommand", typeof(ICommand), typeof(DoubleClickCommand), new UIPropertyMetadata(null, OnDoubleClickCommandChanged));
private static void OnDoubleClickCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs args)
{
FrameworkElement elem = d as FrameworkElement;
var newCommand = args.NewValue as ICommand;
if (elem != null)
{
if (newCommand != null)
{
elem.MouseLeftButtonDown += elem_MouseLeftButtonDown;
}
else
{
elem.MouseLeftButtonDown -= elem_MouseLeftButtonDown;
}
}
}
private static void elem_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (e.ClickCount > 1)
{
DependencyObject dep = sender as DependencyObject;
ICommand command = GetDoubleClickCommand(dep) as ICommand;
var parameter = GetDoubleClickParameter(dep);
if (command != null)
{
if (command.CanExecute(parameter))
{
command.Execute(parameter);
}
}
}
}
}
Чтобы использовать его для TreeViewItems, просто установите Command и CommandParameter (необязательно) на ItemTemplate вашего TreeView.