将点击事件添加到程序添加的菜单项

3

我正在开发一个C# WPF项目,将一些项目存储在SQLite数据库中。程序加载时,它会从数据库检索项目并将项目添加到菜单中。然后,我需要允许用户点击其中一个菜单项,并根据所选内容执行某些操作。我无法找到有关如何实现此功能的任何信息。下面是我如何通过编程方式向菜单添加菜单项的代码。

StoredDBConnectionManager storedDbConnectionManager = new StoredDBConnectionManager(Properties.Settings.Default.app_dbPassword);
List<string> connections = storedDbConnectionManager.getStoredConnections();

foreach (string connection in connections)
{
      mnuFileDBConnections.Items.Add(connection);
}

感谢您能提供的任何帮助。
3个回答

6
这是一个例子:
XAML:
<Menu Height="23" HorizontalAlignment="Left" Name="menu1" VerticalAlignment="Top" Width="200" />

代码后台:

public MainWindow() {
    InitializeComponent();

    MenuItem item = new MenuItem { Header = "test" };
    item.Click += new RoutedEventHandler(item_Click);
    menu1.Items.Add(item);
}

public void item_Click(Object sender, RoutedEventArgs e) {
    MessageBox.Show("Hello!");
}

我的点击没有被调用。 - Hrvoje Batrnek

1

应该有一个MenuItem控件可以实例化并使用connection作为其HeaderContent

MenuItem将具有Click事件处理程序,或者您可以设置命令。

但是最理想的情况是,您应该检索connections集合,将其设置为model上的属性,然后将menu绑定到该集合,这样只需使用菜单的ItemTemplate即可。

例如:

        StoredDBConnectionManager storedDbConnectionManager = new StoredDBConnectionManager(Properties.Settings.Default.app_dbPassword);
        List<string> connections = storedDbConnectionManager.getStoredConnections();

        foreach (string connection in connections)
        {
            var mi = new MenuItem()
            {
                Header = connection,
            };

            mi.Click += ConnectionMenuItemClicked;

            mnuFileDBConnections.Items.Add(mi);
        }

使用绑定的OR:
    <Menu ItemsSource="{Binding Connections}">
        <Menu.ItemTemplate>
            <DataTemplate>
                <MenuItem Header="{Binding}" Click="ConnectionsMenuItem_Clicked">

                </MenuItem>
            </DataTemplate>
        </Menu.ItemTemplate>
    </Menu>

0
foreach(string menuCaption from ...)
{
    MenuItem mi=new MenuItem();
    mi.Header = meniCaption;
    mi.Click += (s,e) =>
        {
             ...
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接