Подтвердить что ты не робот

Как связать команду в WPF с обработчиком события двойного щелчка элемента управления?

Мне нужно связать событие двойного щелчка текстового блока (или, возможно, изображение, так или иначе, его пользовательский элемент управления), с командой в моей модели ViewModel.

TextBlock.InputBindings, похоже, не корректно связывается с моими командами, любая помощь?

4b9b3361

Ответ 3

просто пропустите путь MVVM: Я использую здесь MVVM Light, который легко учиться и силен.

1.Вставьте следующие строки объявления xmlns:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"  
xmlns:GalaSoft_MvvmLight_Command="clr-namespace:GalaSoft.MvvmLight.Command;
                                   assembly=GalaSoft.MvvmLight.Extras.WPF4"

2. Определите свой текстовый блок следующим образом:

<textBlock text="Text with event">
   <i:Interaction.Triggers>
      <i:EventTrigger EventName="MouseDoubleClick">
         <GalaSoft_MvvmLight_Command:EventToCommand 
                             Command="{Binding Edit_Command}"/>
      </i:EventTrigger>
   </i:Interaction.Triggers>
</textBlock>

3. Затем напишите свой код команды в своей модели просмотра.

ViewModel1.cs

Public RelayCommand Edit_Command
{
   get;
   private set;
}

Public ViewModel1()
{
   Edit_Command=new RelayCommand(()=>execute_me());
}

public void execute_me()
{
   //write your code here
}

Я надеюсь, что это сработает для вас, поскольку я использовал его в приложении Real ERP

Ответ 4

У меня также была аналогичная проблема, когда мне нужно было связать событие MouseDoubleClick списка с командой в моей модели ViewModel.

Самое простое решение, которое я выбрал, - это положить фиктивную кнопку с требуемой привязкой команды и вызвать метод Execute команды button в обработчике событий события MouseDoubleClick.

.xaml

 <Button Visibility="Collapsed" Name="doubleClickButton" Command="{Binding Path=CommandShowCompanyCards}"></Button>
                <ListView  MouseDoubleClick="ListView_MouseDoubleClick" SelectedItem="{Binding Path=SelectedCompany, UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Margin="0,10,0,0" ItemsSource="{Binding Path=CompanyList, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" HorizontalContentAlignment="Stretch" >

codebehind

     private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                doubleClickButton.Command.Execute(null);
            }

Это не просто, но очень просто и работает.