WPF - Пользовательский элемент управления + ICommand (как мне это реализовать)? - PullRequest
2 голосов
/ 09 мая 2011

По сути, у меня есть пользовательский элемент управления FooControl.

public class FooControl : ItemsControl
{
    //Code
}

Мне нужно добавить некоторую обработку событий, но вместо использования RoutedEvent я бы предпочел вместо этого использовать Commanding.Я не совсем уверен, как это сделать, хотя.Если я хочу, чтобы при изменении Bar1Property (DependencyProperty) оно вызывало свойство Execute, связанное с execute.Я посмотрел на код ButtonBase через .NET Reflector и ничего себе, это выглядит слишком сложно.Это сложная команда?Очевидно, я также должен был бы сделать так, чтобы мой элемент управления включал / отключал определенные части себя в зависимости от того, изменен CanExecuteChanged или нет.Но я предполагаю, что это другая часть.

Вот моя функция OnBar1Changed ...

    private static void OnBar1Changed(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        FooControl element = (FooControl)obj;
        //What to do here?
    }

Ответы [ 2 ]

4 голосов
/ 09 мая 2011

Похоже, что когда вы задаете свой вопрос, вы хотите поддерживать командование в своем пользовательском элементе управления (как, например, поддержка кнопок). Для этого я рекомендую посмотреть, как реализован ICommandSource. Microsoft дает отличный обзор того, как вы можете реализовать это самостоятельно:

http://msdn.microsoft.com/en-us/library/ms748978.aspx

2 голосов
/ 09 мая 2011

На самом простом уровне все, что вам действительно нужно, это что-то вроде:

FooControl element = obj as FooControl;
if (element == null) return;

if (element.MyCommand != null && element.CanExecute(this.CommandParameter) 
{
  element.MyCommand.Execute(this.CommandParameter);
}

Вам также необходимо создать свойства зависимости как для Command, так и для CommandParameter.Надеюсь, это поможет,

...