2016-12-11 4 views
0

у меня есть коллекция детала-объекты, прикрепленную к WPF MenuItem ItemsSourceWPF MenuItem Нажмите, когда ItemsSource привязан к объектам

public class Item 
{ 
public string Name 
public ?? MethodToCall 
} 

Теперь я хочу использовать событие щелчка (я, вероятно, использовать RelayCommand) для вызова MethodToCall, который является void. Так что же такое тип ?? в моем Item объекте, который я должен использовать? И что должно быть в RelayCommand? Просто Item.MethodToCall()? Я не хочу использовать какой-либо case или что-то в этом роде, поскольку я хочу иметь возможность динамически добавлять элементы в MenuItem и определять в соответствующем объекте мой метод. Спасибо за любую помощь.

ответ

0

Это, как ваша команда реле вызова метода будет выглядеть следующим образом:

private bool _canExecuteMyCommand = true; 
public RelayCommand YourCommand 
{ 
    get; 
    private set; 
} 

public MainViewModel() 
{ 
    MyCommand = new RelayCommand(MethodToCall,() => _canExecuteMyCommand); 
} 

private void MethodToCall() 
{ 
    // Do something 
} 

_canExecuteMyCommand решает, когда команда должна быть выполнена. т.е. когда вызывается функция MethodToCall. Если оно ложно, функция не вызывается.

EDIT:

Вы можете иметь команды несколько реле в пределах класса, т.е. в пределах Item класса следующим образом:

public class Item 
{ 
    public string Name 
    public RelayCommand YourCommand1 
    { 
     get; 
     private set; 
    } 

    public RelayCommand YourCommand2 
    { 
     get; 
     private set; 
    } 
} 
+0

спасибо за ваш ответ. Предположим, у меня есть два объекта (например, новый и напечатать) в коллекции, связанной с MenuItem. Команда relay получит объект как параметр. Теперь я хочу выполнить new() или print(), в зависимости от того, какой из них был нажат. Это должно быть довольно легко, я думаю, но я не знаю, что мои? В исходном вопросе и как выполнить метод в команде relay без вызова явного метода (это должен быть метод из объекта Item и независимо от того, сколько из этих объектов находится в коллекции для MenuItem. – SQLStarter

+0

Думаю, что вам нужно для добавления нескольких команд реле в класс Item, как указано выше. Повторите проверку ответа, который я опубликовал. – ViVi