Ответ 1
Попробуйте использовать Marlon Grech поведение команд.
Мне нужно связать событие двойного щелчка текстового блока (или, возможно, изображение, так или иначе, его пользовательский элемент управления), с командой в моей модели ViewModel.
TextBlock.InputBindings, похоже, не корректно связывается с моими командами, любая помощь?
Попробуйте использовать Marlon Grech поведение команд.
<Button>
<Button.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="YourCommand" />
</Button.InputBindings>
</Button>
http://thejoyofcode.com/Invoking_a_Command_on_a_Double_Click_or_other_Mouse_Gesture.aspx
просто пропустите путь 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
У меня также была аналогичная проблема, когда мне нужно было связать событие 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);
}
Это не просто, но очень просто и работает.