问题描述
我想了解为什么 MenuItem 上的 Click 事件仅触发一次,如果您将项目添加到 ItemsSource。
但是如果您通过另一个控件(即按钮)添加项目,那么 Click 事件会继续触发吗?
<StackPanel>
<Menu HorizontalAlignment="Left" Height="100" Width="100">
<MenuItem Header="MenuItem" Click="MenuItem_Click" ItemsSource="{Binding MyItems}" Height="100" Width="100">
</MenuItem>
</Menu>
</StackPanel>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new Myviewmodel();
}
private void MenuItem_Click(object sender,RoutedEventArgs e)
{
((Myviewmodel)DataContext).AddNewItem(null);
}
}
public class Myviewmodel
{
public ObservableCollection<string> MyItems { get; set; } = new ObservableCollection<string>();
public Myviewmodel() { }
public void AddNewItem(object x)
{
MyItems.Add(Guid.NewGuid().ToString());
}
}
解决方法
当有子项要显示时,会捕获 Click
的 MenuItem
事件。
如果您点击添加的没有子项的 MenuItem
,您的事件处理程序将再次被调用。
您可以处理另一个事件,例如 PreviewMouseLeftButtonDown
来解决这个“问题”。