2009-08-18 11 views

Respuesta

9

Prueba Marlon Grech's attached command behaviors.

+3

Ya tengo tres clases de ayuda en mi proyecto. Solo desearía que WPF tuviera todo el apoyo para todas estas cosas que los desarrolladores quieren hacer con eso, pero creo que eso llegará a tiempo, oye. Gracias, eso funcionó :) – bluebit

+2

Estoy de acuerdo con su opinión general: es un poco frustrante que el soporte para MVVM no esté más integrado en WPF. La mayoría de los desarrolladores experimentados de WPF han creado su propia pequeña biblioteca de auxiliares auxiliares. ¡La brecha en la funcionalidad es aún mayor si está haciendo Silverlight! –

1

También tuve un problema similar en el que necesitaba vincular el evento MouseDoubleClick de una vista de lista a un comando en mi ViewModel.

La solución más simple que surgió es poner un botón ficticio que tiene el enlace de comando deseado y llamar al método Execute del comando del botón en el controlador de eventos del evento 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); 
      } 

No es sencillo, pero es muy simple y funciona.

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 Personalmente, creo que esta respuesta debe ser la correcta. No solo es el más simple, sino que también se puede usar con MVVM vinculando a un 'ICommand' en un modelo de vista:' ' – Sheridan

+0

no trabajando (tal vez en algunos objetos solamente) hasta que haya hecho esto: http://www.telerik.com/community/forums/wpf/gridview/bind-double-click-to-a-viewmodel-command.aspx –

+3

Una buena alternativa a los comportamientos adjuntos desordenados :) –

6

es simple vamos a utilizar la forma MVVM: estoy usando aquí MVVM Light que es fácil de aprender y fuerte.

1.put las siguientes líneas las declaraciones 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.define su bloque de texto como este:

<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 escribir el código de comando en el modelo de vista !!!

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 
} 

espero que funcione para usted como lo he utilizado en la aplicación real ERP

+1

Un poco desordenado con estas "cosas suaves de gala", pero el enfoque de interacción es bueno. –

Cuestiones relacionadas