Как привязать команду в WPF к обработчику событий двойного щелчка элемента управления?
Мне нужно привязать событие двойного щелчка textblock (или потенциально изображение, а также - в любом случае, его пользовательский элемент управления) к команде в моем ViewModel.
TextBlock.InputBindings, похоже, не привязывается правильно к моим командам, любая помощь?
4 ответа:
попробуйте Марлона греха прикрепленные команды поведения.
<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 свет, который легко узнать и сильный.
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.затем напишите свой код команды в viewmodel !!!
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 }
Я надеюсь, что работает для вас, как я использовал его в реальном приложении ERP
у меня также была аналогичная проблема, когда мне нужно было привязать событие MouseDoubleClick listview к команде в моем ViewModel.
самое простое решение, которое я придумал, - это поместить фиктивную кнопку, которая имеет желаемую привязку команды и вызов метода Execute команды кнопки в eventhandler события 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); }
это не просто, но это действительно просто, и это завод.