Когда у нас есть настраиваемый список с определенной обработкой событий для щелчка левой кнопкой мыши, а также дополнительная фигура внутри шаблона данных ListBoxItem, которая должна выполнить какое-то действие при нажатии, как мы можем обработать эти
У меня есть пользовательский ListBox, который пытается обработать событие Click:
В ContentView:
<ABC:AListBox
ClickCommand="{Binding LaunchCommand}"
...>
</ABC:AListBox>
В его табличке данных мыесть это:
<DataTemplate x:Key="ThisListTemplate">
<StackPanel ...>
<Border Grid.Column="1" VerticalAlignment="Center">
<TextBlock
FontSize="15"
Foreground="White"
Text="{Binding Path=ItemTitle}" />
</Border>
<Canvas Height ="12" Width ="12" >
<Ellipse Name = "TheEllipse" Stroke="Black" Height ="12"
Width ="12" Cursor="Hand" Canvas.Left="185" Canvas.Top="12">
</Ellipse>
<Ellipse.InputBindings>
<MouseBinding Gesture="LeftClick"
Command="{Binding DataContext.LaunchFromXamlCommand , RelativeSource={RelativeSource AncestorType=ABC:AListBox}}"
CommandParameter="{Binding}" />
</Ellipse.InputBindings>
</Canvas>
</StackPanel>
</DataTemplate>
И в MVVM в качестве контекста данных мы имеем:
public ICommand LaunchCommand { get; private set; }
public DelegateCommand<object> LaunchFromXamlCommand { get; private set; }
// Initialization on load:
this.LaunchCommand = new DelegateCommand(this.LaunchRun);
this.LaunchFromXamlCommand = new DelegateCommand<object>(this.LaunchFromXamlRun);
//---------
private void LaunchFromXamlRun(object param)
{
TheListItem app = (TheListItem)param;
...
}
private void LaunchRun()
{ ... }
Здесь я использовал 2 разные команды LaunchCommand в качествеICommand в дополнение к LaunchFromXamlCommand, который вызывается через шаблон.
LaunchFromXamlRun
будет срабатывать нормально и, как и ожидалось.Но также, как можно догадаться, будут вызваны 2 вызванных события и 2 команды, которые я хочу пропустить, и игнорировать общий обработчик событий ListBox при получении этой формы.
Что может быть лучшим решениемдля этого?
К вашему сведению: (Может быть, это не так важно, просто для заметки) Приложение использует более ранние версии Prism (не думаю, что это имеет значение здесь) и имеет модульный код, все разделено на разные сборки, и код использует шаблон MVVM.
Хотелось бы, чтобы у нас было что-то вроде e.handled = true
в механизме, который мог бы использоваться в данном сценарии.