2009-08-18 23 views
55

Tôi cần phải ràng buộc sự kiện nhấp đúp của một khối chữ (hoặc có khả năng là một hình ảnh - một trong hai cách, điều khiển người dùng của nó), đến một lệnh trong ViewModel của tôi.Làm thế nào để liên kết một lệnh trong WPF với một trình xử lý sự kiện bấm đúp của một điều khiển?

TextBlock.InputBindings dường như không ràng buộc chính xác với các lệnh của tôi, bất kỳ trợ giúp nào?

Trả lời

9

Hãy thử số attached command behaviors của Marlon Grech.

+3

Tôi đã có ba lớp helper trong dự án của tôi. Tôi chỉ muốn WPF có hỗ trợ đầy đủ cho tất cả những điều mà các nhà phát triển muốn làm với nó, nhưng tôi đoán rằng sẽ đến trong thời gian hey. Cảm ơn, mà làm việc :) – bluebit

+2

Tôi đồng ý về tình cảm chung của bạn - đó là một chút bực bội rằng hỗ trợ cho MVVM không phải là nhiều nướng vào WPF. Hầu hết các nhà phát triển WPF dày dạn đã xây dựng thư viện nhỏ của riêng họ về công cụ trợ giúp phụ trợ. Khoảng cách trong chức năng thậm chí còn lớn hơn nếu bạn đang làm Silverlight! –

1

Tôi cũng đã có một vấn đề tương tự mà tôi cần thiết để ràng buộc sự kiện MouseDoubleClick của một listview vào một lệnh trong ViewModel của tôi.

Giải pháp đơn giản nhất mà tôi đưa ra là đặt một nút giả có lệnh ràng buộc mong muốn và gọi phương thức Execute của lệnh của nút trong eventhandler của sự kiện 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); 
      } 

Nó không phải là đơn giản nhưng nó là thực sự đơn giản và nó hoạt động.

208
<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

+29

+1 Cá nhân, tôi nghĩ câu trả lời này phải là câu trả lời chính xác. Không chỉ đơn giản là nó đơn giản nhất, nhưng nó cũng có thể được sử dụng với MVVM bằng cách liên kết với một 'ICommand' trong một mô hình khung nhìn:' ' – Sheridan

+0

không đang hoạt động (có thể chỉ trên một số đối tượng) cho đến khi bạn thực hiện việc này: http://www.telerik.com/community/forums/wpf/gridview/bind-double-click-to-a-viewmodel-command.aspx –

+3

Thay thế tuyệt vời cho các hành vi kèm theo lộn xộn :) –

6

nó đơn giản hãy sử dụng cách MVVM: Tôi đang sử dụng ở đây MVVM Ánh sáng đó là dễ dàng để tìm hiểu và mạnh mẽ.

1.put những dòng sau xmlns tờ khai:

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

2.define TextBlock của bạn chỉ cần như thế này:

<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.then viết mã lệnh của bạn trong viewmodel của bạn !!!

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 
} 

Tôi hy vọng rằng làm việc cho bạn như tôi đã sử dụng nó trong ứng dụng ERP Bất

+1

Một chút lộn xộn với những 'gala-soft-stuff' nhưng cách tiếp cận tương tác là tốt! –

Các vấn đề liên quan