При привязке с RoutedUICommand это не находится в codebehind

Кроме того, к ответу выше, у Вас может быть таблица MySQL, которая использует механизм CSV.

Затем у Вас будет файл на Вашем жестком диске, который всегда будет в формате CSV, который Вы могли просто скопировать, не обрабатывая его.

7
задан Community 23 May 2017 в 11:43
поделиться

1 ответ

A CommandBinding похож на любой другой элемент в вашем визуальном дереве. Любые события, указанные в нем, будут обрабатываться корнем вашего визуального дерева (в данном случае ваше Окно ). Это означает, что если вы переместите AddPage_Executed и AddPage_CanExecute в код вашего окна, он будет работать. Это позволяет вам использовать одну и ту же команду во многих компонентах пользовательского интерфейса, но иметь разные обработчики.

Однако я вижу, что ваша команда выполняет некоторую логику в отношении вашей модели представления. Чтобы сэкономить время и нервы, поймите, что маршрутизированные команды - неправильное решение. Вместо этого инкапсулируйте свою команду в свою модель представления примерно так:

public class ProjectViewModel
{
    private readonly ICollection<PageViewModel> _pages;
    private readonly ICommand _addPageCommand;

    public ProjectViewModel()
    {
        _pages = new ObservableCollection<PageViewModel>();
        _addPageCommand = new DelegateCommand(AddPage);
    }

    public ICommand AddPageCommand
    {
        get { return _addPageCommand; }
    }

    private void AddPage(object state)
    {
        _pages.Add(new PageViewModel());
    }
}

A DelegateCommand - это реализация ICommand , которая вызывает делегатов для выполнения и запроса команды. Это означает, что вся логика команды заключена в самой команде, и вам не нужна CommandBinding для предоставления обработчиков (вам вообще не нужна CommandBinding ). Итак, ваше представление просто привязывается к вашей виртуальной машине следующим образом:

<MenuItem Header="_New" Command="{Binding AddPageCommand}"/>

Я предлагаю вам прочитать эту серию сообщений, чтобы дать вам больше контекста:

12
ответ дан 6 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: