Страницы

Поиск по вопросам

среда, 5 июня 2019 г.

WPF Interactions CallMethodAction для DataTemplate в ListCheckBox ругается на входные параметры метода во ViewModel

Пытаюсь воспользоваться механизмом поведения, однако не могу правильно прописать аргументы в методе во ViewModel. Использую ListBox состоящий из item включающих в себя CheckBox, собственно перепробовал разные комбинации входных параметров метода, но никак не могу получить объект Item из ListBox при снятии галочки у CheckBox
XAML

C#
public void PropertyUnchecked() { MessageBox.Show("Unchecked"); }
в итоге получаю ошибку:
Thrown: "Could not find method named 'PropertyChecked' on object of type 'CheckedListItem 1' that matches the expected signature."(System.ArgumentException) Exception Message = "Could not find method named 'PropertyChecked' on object of type 'CheckedListItem`1' that matches the expected signature.", Exception Type = "System.ArgumentException", Exception WinRT Data = null
Исходя из сообщения, я посчитал, что метод в коде ViewModel не имеет нужных входных параметров (CheckedListItem именно такие итемы хранятся в ListBox), начал экспериментировать:
[1]
public void PropertyUnchecked(CheckedListItemtr, object sender, RoutedEventArgs e) { MessageBox.Show("Unchecked"); }
[2]
public void PropertyUnchecked(object sender, RoutedEventArgs e) { MessageBox.Show("Unchecked"); }
[3]
public void PropertyUnchecked(object sender) { MessageBox.Show("Unchecked"); }
Также поэкспериментировал с разметкой:

С такой разметкой заработал пустой C# метод, а также [2] и [3], однако ничего кроме CheckBox и его свойств как элемента (в sender) мне не пришло, но нужен именно Item в котором сидит объект типа CheckedListItem . Нашел как реализовать нечто подобное командами с параметрами, но мне нужен именно вызов метода, и обойтись без команд.


Ответ

Я получил ответ на свой вопрос, звучит он так: This is probably what you're looking for:
public void PropertyUnchecked(object sender, RoutedEventArgs e) { var item = ((ContentPresenter)((CheckBox)e.Source).TemplatedParent).Content as CheckedListItem; }
Собственно сам вопрос и ответы доступны по ссылке: Вопрос и ответ

Комментариев нет:

Отправить комментарий