/ / Origine evento Pass con breve sintassi - caliburn.micro

Fonte dell'evento Pass Event con sintassi breve - caliburn.micro

Questo evento del pulsante funzionato Metodo ha passato l'elemento TreeView a ViewModel, ma l'evento di sintassi breve non è passato, dove si trova il problema? Grazie.

<Button Content="Search in TreeView" Height="34" Width="100">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SearchTreeView">
<cal:Parameter Value="{Binding ElementName=TreeView}" />
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<TreeView x:Name="TreeView" ItemsSource="{Binding TreeViewSource}"/>

Breve evento di sintassi

<Button x:Name="SearchTreeView" Content="Search in TreeView" cal:Message.Attach="[Event Click] = [Action SearchTreeView($source.TreeView)]" />

<TreeView x:Name="TreeView" ItemsSource="{Binding TreeViewSource}"/>

risposte:

2 per risposta № 1

Non è necessario specificare $ source.Treeview, solo il nome dell'elemento, TreeView è abbastanza

<Button x:Name="SearchTreeView" Content="Search in TreeView" cal:Message.Attach="[Event Click] = [Action SearchTreeView(TreeView)]" />

<TreeView x:Name="TreeView" ItemsSource="{Binding TreeViewSource}"/>

Detto questo, NON è una buona idea passare un controlloal ViewModel. Se vuoi fare qualcosa con l'elemento selezionato, devi associare la proprietà SelectedItem di TreeView a una proprietà su ViewModel e accedervi dal metodo SearchTreeView, ad es.

<Button x:Name="SearchTreeView" Content="Search in TreeView" cal:Message.Attach="[Event Click] = [Action SearchTreeView()]" />

<TreeView x:Name="TreeView" ItemsSource="{Binding TreeViewSource}" SelectedItem={Binding MySelectedItem}"/>