wpf eventsetter handler binding in style

后端 未结 3 1532
刺人心
刺人心 2020-12-14 02:51

I have a style, and I want to bind a command to the EventSetter\'s Handler with RelativeSource. The command is in the viewModel.

3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-14 03:41

    Right now you are binding the MouseLeftButtonDown Event to TextBlock.TextBlockMouseLeftButtonDownCommand. TextBlockMouseLeftButtonDownCommand is not a valid property for a TextBlock, nor does it sound like it's an Event Handler.

    I use the AttachedCommandBehavior all the time in styles for hooking up a Command to an Event. The syntax usually looks like this (note the DataContextin the Command Binding):

    
    

    The alternative is to hook the EventSetter up to an event in the code-behind, and process the command from there:

    
    

    Event handler in code behind...

    void TextBlockMouseLeftButtonDown(object sender, MouseEventArgs e)
    {
        var tb = sender as TextBlock;
        if (tb != null)
        {
            MyViewModel vm = tb.DataContext as MyViewModel;
    
            if (vm != null && TextBlockMouseLeftButtonDownCommand != null
                && TextBlockMouseLeftButtonDownCommand.CanExecute(null))
            {
                vm.TextBlockMouseLeftButtonDownCommand.Execute(null)
            }
        }
    }
    

提交回复
热议问题