добавление настраиваемого перенаправленного события пользовательского элемента управления в xaml окна в wpf - PullRequest
0 голосов
/ 01 сентября 2010

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

- app.xaml.cs

mainWindow.DataContext = viewModel;

- xaml

lt;Button Grid.Row="1" HorizontalAlignment="Right" Margin="0,3,18,3" Name="button1" Width="110" 
                Command="{Binding LoadCommand}">_Load</Button>

- viewmodel

/// <summary>
        /// Gets the load command.
        /// </summary>
        /// <value>The load command.</value>
        public ICommand LoadCommand
        {
            get
            {
                if (m_LoadCommand == null)
                {
                    m_LoadCommand = new RelayCommand(param => CanLoad(), param => Load());
                }

                return m_LoadCommand;
            }
        }

Здесь relaycommand - это класс, который реализует интерфейс ICommand.CanLoad () и Load () - это методы, которые будут выполняться для canexecute и выполнять действие relaycommand соответственно.Это событие нажатия кнопки, которая обрабатывается.

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

//hook up event listeners on the actual UserControl instance
            this.ucCustomEvent1.CustomClick += new RoutedEventHandler(ucCustomEvent_CustomClick);
            //hook up event listeners on the main window (Window1)
            this.AddHandler(UserControlThatCreatesEvent.CustomClickEvent, new RoutedEventHandler(ucCustomEvent_CustomClick));

Я не хочу явно подключать routedevent в коде, но в xaml так же, как в примере кнопки.Я загрузил рабочий пример кода здесь для вашего ознакомления.

1 Ответ

2 голосов
/ 01 сентября 2010

Я не уверен, что полностью понимаю ваш вопрос, но я надеюсь, что один из моих ответов ниже поможет вам.

Чтобы подключить «прямой» обработчик событий в XAML, просто сделайте следующее:

<c:MyUserControl x:Name="uc1" CustomClick="uc1_CustomClickHandler"/>

Чтобы подключить обработчик для (маршрутизируемого) события одного элемента (например, события CustomClick)в вашем примере) к другому элементу (например, родительскому окну):

<Window c:MyUserControl.CustomClick="ucCustomEvent_CustomClick"/>

Теперь, если вы хотите связать событие в вашем пользовательском интерфейсе с Командой в вашей ViewModel, вам понадобятся присоединенные поведения, чтобытот.Есть много структур вокруг различных реализаций этого.Вот один из них, который вы можете попробовать: http://sachabarber.net/?p=514. Это позволит вам сделать что-то вроде следующего в вашем коде:

 <c:MyUserControl local:CommandBehavior.RoutedEventName="MyCustomClick"
                  local:CommandBehavior.TheCommandToRun="{Binding MyViewModelCommand}"/>

Надеюсь, это поможет.

...