当我们有一个自定义列表框时,它为鼠标左键单击定义了事件处理,并且在 ListBoxItem 数据模板中还有一个附加形状,当它被单击时需要执行一些操作,我们如何处理这些
我有一个 Custom ListBox 女巫试图处理 Click 事件:
在内容视图中:
<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; }
在这里,除了通过模板调用的 LaunchFromXamlCommand 之外,我还使用了 2 个不同的命令 LaunchCommand 作为 ICommand。
LaunchFromXamlRun将按预期正常触发。但也正如可以猜测的那样,将有 2 个引发的事件和 2 个命令被触发,我想省略一个并在该形状被击中时忽略一般的 ListBox 事件处理程序。
这样做的最佳解决方案是什么?
仅供参考:( 可能不是那么重要只是为了说明)该应用程序正在使用早期版本的 Prism(不要认为这在这里很重要)并且具有模块化代码,所有内容都在不同的程序集中分离并且代码使用 MVVM 模式。
我希望我们有e.handled = true一个可以在给定场景中使用的机制。
ITMISS
相关分类