微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MenuItem Click 事件仅在修改其自己的 ItemsSource 时触发一次

如何解决MenuItem Click 事件仅在修改其自己的 ItemsSource 时触发一次

我想了解为什么 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());
        }
}

解决方法

当有子项要显示时,会捕获 ClickMenuItem 事件。

如果您点击添加的没有子项的 MenuItem,您的事件处理程序将再次被调用。

您可以处理另一个事件,例如 PreviewMouseLeftButtonDown 来解决这个“问题”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。