1 | ||||||
ICommand и Template, Command Parametr30.03.2016, 00:12. Показов 1408. Ответов 10
Доброго времени суток.
У меня имеется код наподобие этого: Кликните здесь для просмотра всего текста
В свою очередь этот участок кода также является шаблоном элементов для другого объекта. Начал свое знакомство с ICommand и хочется узнать: Можно ли как-то в ViewModel описать MenuItemClick Command, который будет принимать ListBoxItem, у которого было вызвано контекстное меню? Почему-то ещё данный участок кода с Command не работает - в ViewModel имеется свойство, делегат завязан на методе, но вызова не происходит, DataContext установлен. Не могли бы вы подсказать в чем проблема? (Что-то подсказывает мне, что кроме Сommand="{Binding MenuItemClick}" нужно ещё что-то писать туда.)Спасибо. Добавлено через 13 часов 11 минут Может ли это быть по той причине, что при вызове Сommand="{Binding MenuItemClick}" идет вызов у родительского объекта, которым является экземпляр коллекции, которая представлена в ListBox?Т.е. если у нас класс Student, то запрос идет к экземпляру Student, у которого запрашивается свойство MenuItemClick Можно ли организовать код xaml так, чтобы ItemsSource бралось из родительского объекта, а Command брался из DataContext (Т.е. самого что ни на есть родительского свойства)?
0
|
30.03.2016, 00:12 | |
Ответы с готовыми решениями:
10
При вставке данных в таблицу: Command text was not set for the command object. Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier Template definition of non-template при использовании частичной спецификации шаблонов 'MyQueue' : use of class template requires template argument list |
Жуткая тВарЬ
|
|
30.03.2016, 14:01 | 2 |
посмотрите тему ContextMenu для DatagridRow, включение\отключение MenuItems
1
|
30.03.2016, 20:15 [ТС] | 3 |
amarf, Посмотрел, пробежался по проекту, который вы прикрепили.
У вас все работает, все хорошо. Но у меня немного другая структура - У меня ужасная вложенность. Точнее: У меня имеется TabControl, где генерятся TabItem, контент которых генерится также как ListBox (+label), и внутри ListBox происходит генерация ListBoxItem по шаблону (юзерконтрол). Ну вот из нижней ветви мне необходимо обратится к самому верху, т.е. из своего UserControl получить исходный DataContext и оттуда стянуть мою команду. TabControl (1) -> TabItems (1+) => ListBox (1+) ==> ListBoxItem Т.е. имеются несколько TabItem, внутри каждого имеются несколько ListBox и внутри каждого LB имеется некоторое количество ListBoxItem
0
|
Жуткая тВарЬ
|
|
30.03.2016, 21:04 | 4 |
bodynar, не вижу проблем, как уже говорилось выше используйте пример и в байдинг пропишите поиск ансесора и нужный его уровень например 3, без разметки конечно всю картину не видно но как мне кажется эта проблема и выеденного яица не стоит
0
|
30.03.2016, 21:30 [ТС] | 5 | ||||||||||||||||||||||||||||||
amarf, Если я правильно понял - в ContextMenu необходимо прописать в биндинге поиск ансесора.
Мне необходимо достучаться до DataContext окна, то в AncestorType прописать Window? А разметка.. адова XAML
iWeeksControl
iWeekControl
iDayControl
iEventControl
iWeeksControl используется в окне. Попробовал написать что-то вроде
Дополнительные сведения: "Инициализация "System.Windows.Data.RelativeSource" вызвала исключение.": номер строки "30" и позиция в строке "63". Внутри ViewModel такое:
0
|
Жуткая тВарЬ
|
|
30.03.2016, 21:55 | 6 |
bodynar, Если датаконтекст у окна то пишите ansestortype={x:type window} уровень ансестора не указывайте т.к. окно дваждый не встречается ну и мод FindAncestor..
Да главное не забыть что привязка может к Datacontext.ClickMe а не просто к ClickMe
0
|
30.03.2016, 21:59 [ТС] | 7 | |||||||||||||||
Решил вопрос с установлением поиска родителя и использованием CommandReference
Кликните здесь для просмотра всего текста
0
|
30.03.2016, 22:08 [ТС] | 9 |
amarf, Совершенно верно, мне необходимо было перекинуть запрос из контекстного меню на команду внутри ViewModel.
Не по теме: Если честно - наверное в силу своей криворукости не смог добиться результата способом, предложенным вами.
0
|
Жуткая тВарЬ
|
||||||
31.03.2016, 08:57 | 10 | |||||
bodynar, так вот такая разметка не помогает?
Если не помогает, то скидывайте сам проект, потому что воспроизодить вашу модель данных не особо хочется с нуля
0
|
31.03.2016, 10:37 [ТС] | 11 |
amarf, Привязка не работает, Output пишет:
Код
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1''. BindingExpression:Path=DataContext; DataItem=null; target element is 'ContextMenu' (Name=''); target property is 'DataContext' (type 'Object') Спасибо
0
|
31.03.2016, 10:37 | |
31.03.2016, 10:37 | |
Помогаю со студенческими работами здесь
11
В чем различие template <typename T> от template <class T> ? Ошибка компиляции: template-id does not match any template declaration Visual Studio выдаёт ошибку при вынесении объявления функции с template в .h файл. Без template всё работает 1>cl : Command line error D8016 : '/MTd' and '/clr' command-line options are incompatible Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |