Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2016, 12:58   #1
Grindin
Новичок
Джуниор
 
Регистрация: 09.06.2016
Сообщений: 2
Лампочка C# WPF Удаление и обновление элементов

Здравствуйте, пишу RSS читалку, которая работает через кнопки. Для вопрос и общей информации покажу код:
Добавление канала:
Код:
 
                XmlReader readxml = XmlReader.Create(textBox.Text);
                SyndicationFeed feed = SyndicationFeed.Load(readxml);

                int Z = Stackpnelleft.Children.Count +1;
                if (Z == 0) { Z++; };

                TextBlock TX = new TextBlock();
                Button ButtonTitle = new Button();
                ContextMenu contextmenu = new ContextMenu();
                MenuItem mi = new MenuItem();
                
                TX.TextWrapping = TextWrapping.Wrap;
                TX.Text = feed.Title.Text;
                TX.TextAlignment = TextAlignment.Center;
                ButtonTitle.Content = TX;

                //ButtonTitle.Uid = "BBB" + Z + "";
                ButtonTitle.Tag = feed;

                ButtonTitle.ContextMenu = contextmenu;
                mi.Header = "Удалить";
                mi.Click += Delete_Channel;

                ButtonTitle.Click += OnFeedClick;

                contextmenu.Items.Add(mi);
                Stackpnelleft.Children.Add(ButtonTitle); // Канал  
                F2.YN = true;
Добавление новостей:
Код:
           Stackpnelmiddle.Children.Clear();
           
            var f = ((SyndicationFeed)((Button)s).Tag);
            foreach (SyndicationItem item in f.Items)
            {
                TextBlock TX1 = new TextBlock();
                Button Buttonitem = new Button();
                TX1.TextWrapping = TextWrapping.Wrap;
                TX1.Text = item.Title.Text;
                TX1.TextAlignment = TextAlignment.Center;
                Buttonitem.Content = TX1;

                Buttonitem.Tag = item;
                // UID
              
                // Buttonitem.ToolTip = " " + q + "";
               
                Buttonitem.Click += OnSyndicationItemClick;
                
                Stackpnelmiddle.Children.Add(Buttonitem);
И открытие новости:

Код:
            SyndicationItem item = ((SyndicationItem)((Button)sender).Tag);

            label2.Content = item.PublishDate.DateTime.ToString(System.Globalization.CultureInfo.InvariantCulture);  
            
            var f = item.Links[0].Uri;
            HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(f);
            this.WebBrowser.Navigate(f);
Внимание вопрос, как мне удалить только один канал, который фактически является клавишей в stackpanel, через контекстое меню (там есть пункт удалить)

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 09.06.2016 в 13:04.
Grindin вне форума Ответить с цитированием
Старый 09.06.2016, 13:12   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В WPF обычно используют биндинги, ItemTemplate и т.п. и MVVM вместо прямого взаимодействия с элементами.

Например коллекция с каналами (из объекта ViewModel) в XAML прибиндена к ItemsSource в ItemsControl/ListBox/DataGrid/.../TabControl/... и в его ItemTemplate указано как отображать эти данные.

http://programmersforum.ru/showthrea...96#post1592396
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 09.06.2016 в 13:16.
Alex11223 вне форума Ответить с цитированием
Старый 09.06.2016, 13:40   #3
Grindin
Новичок
Джуниор
 
Регистрация: 09.06.2016
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
В WPF обычно используют биндинги, ItemTemplate и т.п. и MVVM вместо прямого взаимодействия с элементами.

Например коллекция с каналами (из объекта ViewModel) в XAML прибиндена к ItemsSource в ItemsControl/ListBox/DataGrid/.../TabControl/... и в его ItemTemplate указано как отображать эти данные.

http://programmersforum.ru/showthrea...96#post1592396
Проблема в то что уже большая часть закончена, поэтому хотелось бы удалять на прямую, но как понять не могу поскольку все объекты внутри StackPanel динамические и не знаю каким образом они выводятся в панель, какое имеют имя и.тд. Тобишь не знаю как найти именно ту кнопку на котором я вызвал контекстное меню.
Grindin вне форума Ответить с цитированием
Старый 09.06.2016, 15:43   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Это сложнее, чем биндинг.

Зависит от того как меню реализовано.
Может быть в sender события открытия есть нужный объект?
Ну или куда-то в Tag и т.п. засунуть ссылку на элемент или ID/имя. Кнопки может быть удобно хранить в Dictionary<ид, кнопка> или Dictionary<ид, объект_хранящий_кнопку_и_все_осталь ные_связанные_элементы>.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
wpf: обновление гуи chugada WPF, UWP, WinRT, XAML 27 03.02.2016 19:44
Обновление таблицы БД SqlLite - C# WPF Notan1310 WPF, UWP, WinRT, XAML 4 08.10.2015 14:34
WPF/ Обновление ItemsSource-а ShoGUN WPF, UWP, WinRT, XAML 0 02.06.2014 18:34
C#, WPF. Привязка элементов listbox к комманде. ABC12 C# (си шарп) 0 10.09.2012 20:41
WPF, удаление файлов. mixa_go WPF, UWP, WinRT, XAML 5 30.08.2011 20:07