Добавление события клика к пункту меню, добавленному программно

Я работаю над проектом С# 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);
}

Спасибо за любую помощь, которую вы можете предоставить.


person Boardy    schedule 06.04.2013    source источник


Ответы (2)


Вот пример:

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!");
}
person Steve    schedule 06.04.2013
comment
Мой клик не вызывается. - person Hrvoje Batrnek; 25.12.2019

Должен быть элемент управления MenuItem, который вы можете создать и использовать connection как его Header или Content.

Затем MenuItem будет иметь обработчик событий Click, или вы можете установить команду.

В идеале, однако, вы должны получить коллекцию connections, присвоить ей свойство model, а затем связать menu с этой коллекцией, таким образом, просто использовать ItemTemplate для меню.

e.g.

        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);
        }

ИЛИ с привязкой:

    <Menu ItemsSource="{Binding Connections}">
        <Menu.ItemTemplate>
            <DataTemplate>
                <MenuItem Header="{Binding}" Click="ConnectionsMenuItem_Clicked">

                </MenuItem>
            </DataTemplate>
        </Menu.ItemTemplate>
    </Menu>
person Clint    schedule 06.04.2013