powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как из другого класса можно создать обработчик события
8 сообщений из 8, страница 1 из 1
Как из другого класса можно создать обработчик события
    #38654340
buriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой.
Есть отдельный класс в котором из базы данных заполняется меню. Каждый Item создается динамически.

class Elemente
{
ProducereEntities pv = new ProducereEntities();

public void CreateMenu(Menu menuArticole)
{ ...
...
var queryArtic = from p in Artic
orderby p.Articol
where (p.IdSubcategArt == sub.Id)&&(sub.IdCateg==h.Id)
select p;
int l=0;
foreach (Articole art in queryArtic)
{
MenuItem c = new MenuItem();

c.Header = art.Articol;
b.Items.Add(c);
c.Name = "Item" + l.ToString();
l = l + 1;
}
...
...
}
}

Как сделать обработчик события нажатия на каждый Item уже соответственно на ФОРМЕ где находится сам меню.
...
Рейтинг: 0 / 0
Как из другого класса можно создать обработчик события
    #38654362
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buriu,

создать общий класс для всех пунктов меню на базе интерфейса ICommand,
реализовать его, в качестве параметра передавать "название пункт" или какой то уникальный ключ каждого элемента
MenuItem.Command присвоить эту команду , MenuItem.CommandParameter параметру присвоить этот уникальный ключ элемента
...
Рейтинг: 0 / 0
Как из другого класса можно создать обработчик события
    #38654377
buriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,
А нельзя ли как-то так? Или если можно поточнее...
...
MenuItem c = new MenuItem();

a.Click +=ArticolePage. myItem_Click(); // Articole.Page это форма на которой находится сам обработчик
...
Рейтинг: 0 / 0
Как из другого класса можно создать обработчик события
    #38654378
buriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buriu,
a=c :)
...
Рейтинг: 0 / 0
Как из другого класса можно создать обработчик события
    #38654381
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно и так, но тогда параметр лучше сохранить в свойстве Tag, а уже на основании параметра запускать нужный метод. либо создать Attached свойство и аттачить его к MenuItem
...
Рейтинг: 0 / 0
Как из другого класса можно создать обработчик события
    #38654575
buriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,
Если не затруднит, вы не можете написать примерный код, а то я новичек и трудно вьезжаю...
...
Рейтинг: 0 / 0
Как из другого класса можно создать обработчик события
    #38654634
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buriu,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    public class MenuData
    {
        public string Name { set; get; }
        public string Key { set; get; }
        public Action Execute { set; get; }
    }

    class Data
    {
        public List<MenuData> MenuItems { set; get; }
        
        public Data()
        {
            MenuItems = new List<MenuData>()
            {
                new MenuData {Name = "Menu 1", Key = "menu1"},
                new MenuData {Name = "Menu 2", Key = "menu2"},
                new MenuData {Name = "Menu 3", Key = "menu3", Execute = MyMethod}

            };
        }

        public void MyMethod()
        {
            MessageBox.Show("Menu 3");
        }
    }


Форма:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<Window x:Class="WpfApplication9.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        DataContextChanged="MainWindow_OnDataContextChanged">
    <Grid>
        <Menu>
            <MenuItem Header="Test">
                <MenuItem Header="Item 1"></MenuItem>
                <MenuItem x:Name="ParentMenu" Header="Parent"/>
            </MenuItem>
        </Menu>
    </Grid>
</Window>


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void MainWindow_OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            ParentMenu.Items.Clear();
            var data = (Data) DataContext;
            foreach (var i in data.MenuItems)
            {
                var menu = new MenuItem {Header = i.Name, Tag = i};
                menu.Click += menu_Click;
                ParentMenu.Items.Add(menu);
            }
        }

        void menu_Click(object sender, RoutedEventArgs e)
        {
            var menu = (MenuItem)sender;
            var data = (MenuData) menu.Tag;

            if (data.Execute != null)
            {
                data.Execute();
                return;
            }

            switch (data.Key)
            {
                case "menu1":
                    MessageBox.Show("Menu 1");
                    break;
                case "menu2":
                    MessageBox.Show("Menu 2");
                    break;
            }
        }
    }


пиши в скайп если что не понятно roman_meites
...
Рейтинг: 0 / 0
Как из другого класса можно создать обработчик события
    #38654639
buriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Большое спасибо...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как из другого класса можно создать обработчик события
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]