Как я могу прикрепить обработчики событий к элементам, созданным с помощью привязки данных в WPF? - PullRequest
2 голосов
/ 05 апреля 2009

Я разрабатываю для устройства MS Surface и использую ScatterView для отображения некоторых данных. Сценарий ниже, вероятно, подходит и для обычного ListBoxListBoxItems).

Когда я связываю данные с ScatterView, WPF автоматически оборачивает содержимое DataTemplate с ScatterViewItems. Я хочу прикрепить некоторые обработчики событий для ScatterManipulationCompleted события (сгенерированного) ScatterViewItem, но не могу понять, как это сделать.

Любая помощь очень ценится.

Ответы [ 3 ]

2 голосов
/ 08 апреля 2009

Вы должны воспользоваться перенаправленными событиями. Вы можете просто прослушать это событие на уровне ScatterView.

        <surface:ScatterView surface:ScatterViewItem.ScatterManipulationCompleted="OnManipulationCompleted"/>
2 голосов
/ 05 апреля 2009

Вы можете установить Style для типа контейнера и указать EventSetter следующим образом:

<surface:ScatterView>
    <surface:ScatterView.ItemContainerStyle>
        <Style TargetType="{x:Type surface:ScatterViewItem}">
            <EventSetter Event="ScatterManipulationCompleted" Handler="myHandler"/>
        </Style>
    </surface:ScatterView.ItemContainerStyle>
</surface:ScatterView>
0 голосов
/ 05 апреля 2009

Как это часто бывает, теперь я нашел ответ / a. Я смотрел на это последние 20 часов или около того, только чтобы найти его через 5 минут после публикации вопроса: - (

В любом случае: решение, которое я нашел и которое мне сейчас помогает, заключается в использовании события Loaded ScatterView. В обработчике у меня есть следующий цикл:

    for (int i = 0; i < MiniBrowserContent.Items.Count; i++)
{
    ScatterViewItem svItem = (ScatterViewItem)(MiniBrowserContent.ItemContainerGenerator.ContainerFromIndex(i));
    svItem.ScatterManipulationCompleted += new ScatterManipulationCompletedEventHandler(svItem_ScatterManipulationCompleted);
}

Все это пришло ко мне после прочтения http://www.beacosta.com/blog/?p=7

Надеюсь, это кому-нибудь еще поможет.

Bye, Bart

...