2014-10-23 2 views
1

У меня есть модель представления, у которой есть еще один набор классов. Другой класс содержит реализации ICommand в качестве своих свойств. Я хотел бы выполнить одну из команд с двойным щелчком.Как использовать Message.Attach для вызова методов внутри другого объекта

К сожалению, Caliburn.Micro вместо этого создает исключение («Нет цели для метода Commands.Command.Execute.»).

Я попытался выполнить поиск в сети и прочитать документацию, но безуспешно.

Как это сделать правильно?

Примечание: в реальном приложении сообщение может быть присоединено к представлению сетки, которое может иметь другой DataContext, чем модель представления, содержащая класс команд.

Часть XAML:

<Window x:Class="WpfApplication8.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:cal="http://www.caliburnproject.org"> 
    <Grid> 
     <TextBox 
      cal:Message.Attach="[Event MouseDoubleClick] 
       = [Action Commands.Command.Execute(null)]" /> 
    </Grid> 
</Window> 

Код-за класс:

namespace WpfApplication8 
{ 
    public partial class MainWindow 
    { 
     public Commands Commands { get; set; } 

     public MainWindow() 
     { 
      this.Commands = 
       new Commands { Command = new Command { MainWindow = this } }; 

      this.InitializeComponent(); 

      this.DataContext = this; 
     } 
    } 

    public class Commands 
    { 
     public Command Command { get; set; } 
    } 

    public class Command 
    { 
     public MainWindow MainWindow { get; set; } 

     public void Execute(object parameter) 
     { 
      this.MainWindow.Title = "Executed"; 
     } 
    } 
} 
+1

Рассмотрим проверить [Action.TargetWithoutContext] (https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions) –

+1

Спасибо, решена. cal: Message.Attach = "[Event MouseDoubleClick] = [Action Execute (null)]" cal: Action.TargetWithoutContext = "{Binding Commands.Command}" – alik

ответ

0

Как @alik комментировал, полное решение:

<Window x:Class="WpfApplication8.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:cal="http://www.caliburnproject.org"> 
    <Grid> 
     <TextBox 
      cal:Message.Attach="[Event MouseDoubleClick] = [Action Execute(null)]" 
      cal:Action.TargetWithoutContext="{Binding Commands.Command}"/> 
    </Grid> 
</Window> 
Смежные вопросы