Ответ 1
Прямо сейчас вы привязываете событие MouseLeftButtonDown
к TextBlock.TextBlockMouseLeftButtonDownCommand
. TextBlockMouseLeftButtonDownCommand
не является допустимым свойством для TextBlock и не звучит как обработчик событий.
Я использую AttachedCommandBehavior все время в стилях для подключения команды к событию. Синтаксис обычно выглядит следующим образом (обратите внимание на DataContext
в привязке команд):
<Style x:Key="ItemTextBlockEventSetterStyle" TargetType="{x:Type TextBlock}">
<Setter Property="local:CommandBehavior.Event" Value="MouseLeftButtonDown" />
<Setter Property="local:CommandBehavior.Command"
Value="{Binding DataContext.TextBlockMouseLeftButtonDownCommand,
RelativeSource={RelativeSource Self}}" />
</Style>
Альтернативой является привязка EventSetter к событию в кодировке и обработка команды оттуда:
<Style x:Key="ItemTextBlockEventSetterStyle" TargetType="{x:Type TextBlock}">
<EventSetter Event="MouseLeftButtonDown"
Handler="TextBlockMouseLeftButtonDown"/>
</Style>
Обработчик событий в коде позади...
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)
}
}
}