2016-05-19 14 views
0

Ich habe eine ItemsControl wie folgt:Trigger-Methode des Elements innerhalb des Itemscontrol mit Caliburn Micro

<ItemsControl ItemsSource="{Binding Items}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <ContentControl cal:Message.Attach="[Event MouseDoubleClick] = [Action ($dataContext).Launch]"> 
        <Grid Background="LightSteelBlue" Width="100" Height="100" Margin="4"/> 
       </ContentControl> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

Die ItemsControl ‚s Artikel Quelle eine Bindung an ein ObservableCollection<Item> im View-Modell hat.

Im Folgenden ist die Definition von Item

public class Item 
{ 
    public void Launch() 
    { 
    } 
} 

Wenn auf den Item doppelgeklickt, Ich versuche, die Launch() Methode der Item mit folgenden Syntax auslösen:

cal:Message.Attach="[Event MouseDoubleClick] = [Action ($dataContext).Launch]" 

Allerdings bekomme ich die Fehlermeldung "Kein Ziel für Methode gefunden".

Verwende ich die Syntax richtig? Oder die Kurzschrift unterstützt einen solchen Anwendungsfall nicht?

UPDATE:

My Ansicht Modell ist wie folgt:

public class MainViewModel 
{ 
    // Binding Properties. 
    public ObservableCollection<Item> Items 
    { 
     get; 
     set; 
    } 
    public void Launch() 
    { 

    } 

    // ctor. 
    public MainViewModel() 
    { 
     Items = new ObservableCollection<Item>(); 
     Items.Add(new Item()); 
     Items.Add(new Item()); 
    } 
} 

Wenn ich die folgende Syntax zu verwenden versucht Launch() Methode der Item auszulösen, sie lösen die Launch() Verfahren der Ansicht Modell statt.

cal:Message.Attach="[Event MouseDoubleClick] = [Action Launch]" 

Antwort

0

Als ich Launch() Methode aus meiner Sicht Modell, Launch() Methode für Item ausgelöst entfernt. Es scheint so, als ob im View-Modell eine passende Methode gefunden wird, die diese Methode im View-Modell ausführt. Wird im View-Modell keines gefunden, sucht das Framework im aktuellen Kontext und führt die Methode aus, wenn die Matched-Methode gefunden wird.

Verwandte Themen