Триггеры, команды не запускаются в пользовательском элементе ListBox ItemTemplate - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть собственный элемент управления ListBox со стилем, установленным в моем Themes / Generic.xaml. Затем у меня есть кнопка в ItemTemplate ListBox, и это событие Click не срабатывает, и я понятия не имею, почему. То же самое касается команд кнопки (я уверен, что проблема команд не связана с DataContext) и триггеров взаимодействия. При попытке отладки я заметил, что использование ListBox по умолчанию вместо моего остановило проблему, но мне нужно использовать пользовательский элемент управления.

Это по сути то, что у меня есть (пух для краткости снят). Кнопка:

<controls:CustomListBox>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Button Click=MyHandler/>
    </DataTemplate>
  </ListBox.ItemTemplate>
</controls:CustomListBox>

И стиль пользовательского элемента управления в Темах / Generic:

<Style TargetType="{x:Type controls:CustomListBox}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type controls:CustomListBox}">
        <Border>
          <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}">
            <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
          </ScrollViewer>
         </Border>
       </ControlTemplate>
     </Setter.Value>
   </Setter>
 </Style>

Как я могу запустить это событие?

1 Ответ

0 голосов
/ 22 апреля 2019

Я думаю, что это, вероятно, должен быть пользовательский контроль, а не пользовательский элемент управления.

Вы действительно собираетесь изменить шаблон из этого для чего-то еще?

Если вы используете обработчик событийкак тогда, как вы планируете использовать делегата?Это очень негибкий способ работы, к которому вы стремитесь.

Вы упомянули команду, которая, вероятно, скорее похожа на нее.

Если вы используете кнопку в шаблоне элемента с привязкой к командекак

 <Button Command="{Binding RowCommand}"

Тогда текст данных этого Button является содержимым строки.

Если вы связываете ItemsSource с коллекцией ItemsVM, то он ищет в ItemVM, который представлен этомустроки.

...