хочу создать список с текстовым блоком и кнопкой элемента шаблона - PullRequest
0 голосов
/ 29 мая 2010

альтернативный текст http://www.freeimagehosting.net/uploads/abbcae9cd3.png

Я хочу создать список, подобный показанному на картинке, я просто не знаю, как я получу событие нажатия кнопки (красная кнопка закрытия) для каждого элемента в списке Может кто-нибудь указать мне хороший учебник по этому

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 мая 2010

Создайте кнопку как обычно, с обработчиком Click:

<Button Click="MyClickHandler">...</Button>

Теперь в вашем обработчике кликов у вас есть аргумент sender, который будет содержать нажатую кнопку. Вы хотите элемент, которому принадлежит кнопка, хотя. Во-первых, вам нужно ListViewItem, который содержит кнопку. Есть несколько реализаций того, как найти визуального предка, вот первый результат, который я нашел. Добавьте этот метод расширения к статическому классу где-нибудь. Теперь ваш обработчик кликов выглядит так:

private void MyClickHandler(object sender, RoutedEventArgs e)
{
     ListViewItem parent = ((DependencyObject)sender).TryFindParent<ListViewItem>();
}

Теперь вам нужно получить предмет, который идет с этим ListViewItem. Это, к счастью, намного проще (хотя я понятия не имею, что это такое, поскольку в вашем посте ничего не сказано):

    object ItemRelatedToButton = TheListBoxInQuestion.ItemContainerGenerator.ItemFromContainer(parent);

Замените object типом, который фактически содержит ваш ListBox, а названия - теми, которые действительно актуальны. Теперь вы можете взаимодействовать с элементом, к которому «привязана» кнопка.

Вы также можете убедиться, что parent не равно нулю, просто на случай, если что-то странное произошло, и теоретически вы должны убедиться, что ItemRelatedToButton тоже не равно нулю.

0 голосов
/ 30 мая 2010

Если вы не хотите писать код, как MVVM предлагает, у вас есть два варианта: 1. если элемент управления в вашей табличке данных поддерживает ICommand, отправьте DataContext в качестве CommandParameter. Затем параметр будет передан в ваш метод execute команды. 2. Если элемент управления не имеет свойства ICommand, создайте вложенное свойство, в обратном вызове PropertyChangedCallback вы можете подключить команду к событию clicked. С другой стороны, в Xaml вы можете передать Datacontext в качестве CommandParameter.

Извините, что не уточняю подробности, но если вы ищете MVVM, Command и Attached, вы должны найти тонны подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...