0

我有自定义控件,它处理来自控件的事件并将其抛出给父级。

控制代码

public delegate void ThumbMovedEventHandler(object sender);
public event ThumbMovedEventHandler ThumbMoved;

private void SliderTimeLine_OnDragCompleted(object sender, DragCompletedEventArgs e)
{
     if (ThumbMoved != null)
            ThumbMoved(this);
}

我想将事件绑定到我的 MVVM 应用程序中的命令。

查看代码

    <TimeTimeSlider:TimeSlider 
                   StartDate="{Binding TimeLineStartDate}"
                   local:CommandBehavior.Event="ThumbMoved"
                   local:CommandBehavior.Action="{Binding ThumbMoved}"
                   local:CommandBehavior.CommandParameter="Thumb Place Ment Moved "
                                   />

视图模型代码

    private ICommand thumbMoverCommand;

   public ICommand ThumbMoved
    {
        get { return this.thumbMoverCommand ?? (this.thumbMoverCommand = new DelegateCommand(this.ExcuteThumbMoved)); }
    }


    public void ExcuteThumbMoved()
    {
      //Do Something;
    }

当从名为 CommandBehaviorBinding 的类上的控件中引发事件时

   public ICommand Command
    {
        get { return _command; }
        set
        {
            _command = value;
            //set the execution strategy to execute the command
            _strategy = new CommandExecutionStrategy { Behavior = this };
        }
    }

    public void Execute()
    {
        _strategy.Execute(CommandParameter);
    }

我收到“对象引用未设置为对象的实例”错误,因为 _strategy 为空。

我该如何解决?

4

2 回答 2

0

本地:命令行为。命令="{绑定拇指移动}"

     <TimeTimeSlider:TimeSlider 
               StartDate="{Binding TimeLineStartDate}"
               local:CommandBehavior.Event="ThumbMoved"
               local:CommandBehavior.Command="{Binding ThumbMoved}"
               local:CommandBehavior.CommandParameter="Thumb Place Ment Moved "
                               /> 
于 2013-09-22T09:58:02.120 回答
0

您需要在其他地方完成您的 _strategy 任务。无论是在构造函数中,当另一个命令发生时,一个事件发生等等——只要 Behavior 不为空,例如在实例化或更改/更新时。现在,它永远不会set在那个 setter 中 - 可以通过在那个 setter 中放置一个断点来看到。

于 2013-09-23T12:16:24.847 回答