2013-09-22 2 views
0

У меня есть пользовательский контроль, и он обрабатывает событие из элемента управления и передает его родительскому.MVVM Events и ICommand Binding

Код управления

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

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

Я хочу, чтобы связать событие с командой в моем MVVM приложения.

View Code

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

ViewModel Код

private ICommand thumbMoverCommand; 

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


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

Когда Событие генерируется из-под контроля на классе Called 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 имеет значение null.

Как исправить это?

+1

Я не вижу никакого кода, который присваивает что-либо '_strategy'. Я вижу пользовательский набор, который * будет * назначать ему, но я не вижу нигде, что называется. –

ответ

0

местный: CommandBehavior. Команда = "{Binding} ThumbMoved"

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

Это ответ или комментарий? –

0

Вы должны сделать свое назначение _strategy где-то в другом месте. Либо в конструкторе, когда происходит другая команда, происходит событие и т. Д. - везде, где Behavior не является нулевым, например, при создании экземпляра или при изменении/обновлении. Прямо сейчас он никогда не бывает set в этом сеттере - его можно увидеть, поставив точку останова в этом сеттере.