Не удается выбрать элемент в списке

#c# #wpf

#c# #wpf

Вопрос:

Моей целью было создать ListBox, который изменил свой шаблон в соответствии с данными, теперь я сделал это с помощью ItemTemplateSelector, и шаблоны были выбраны правильно, но моя проблема в том, что я не могу выбрать элемент в even handlaer, Selection_Changed или в Mouse_Double_Click, или что-то еще, selectedindex всегда равен нулю. И SelectedItem всегда равен нашей первой строке

Можете ли вы предложить решение, чтобы я мог выбрать элемент?

 <ListBox   x:Name="listBox"  ItemsSource="{Binding Objects}" ItemTemplateSelector="{StaticResource studentDataTemplateSelector}" IsSynchronizedWithCurrentItem="True" ItemContainerStyle="{DynamicResource _ListBoxItemStyle}" SelectionChanged="listBox_SelectionChanged" MouseDoubleClick="listBox_MouseDoubleClick">
</ListBox>
  
  <local:StudentDataTemplateSelector x:Key="studentDataTemplateSelector"/>
        <DataTemplate x:Key="templateMusic">
            <ccontrols:FileUi  ContainStr="1Item" TitleStr="{Binding NameFile}" SizeStr="{Binding Size}" CreatedTime="{Binding CreateTime}" ImageUri="Assets/Music.png"/>


        </DataTemplate>
        <DataTemplate x:Key="templateMovie">
            <ccontrols:FileUi ContainStr="1Item" TitleStr="{Binding NameFile}" SizeStr="{Binding Size}" CreatedTime="{Binding CreateTime}" ImageUri="Assets/video.png"/>
        </DataTemplate>
  
  public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            FrameworkElement element = container as FrameworkElement;

            if (item==null)
            {
                return null;
            }

            if (item.GetType() == typeof(File))
            {
                if (Enum.TryParse((((File)item).Extension), true, out ExtensionClass.Music sample))
                {
                    return
                         element.FindResource("templateMusic")
                         as DataTemplate;
                }
                else 
                {
                    return
                        element.FindResource("templateMovie")
                        as DataTemplate;
                }

             
        }
    }
  

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

1. Может быть, конфликт с ItemContainerStyle is там Template определен?

2. @aepot я удалил его, но не изменил

3. Тогда лучше добавить к вопросу какой-нибудь воспроизводимый пример.

4. Неясно, что вы пытаетесь сделать, и, что более важно, что именно происходит на самом деле. Когда вы нажмете на элемент, он ListBox.SelectedItem изменится на этот элемент. Это вызовет SelectionChanged событие. Чтобы установить выбранный элемент программно, просто установите ListBox.SelectedItem значение ListBox.Items коллекции или источника привязки ItemsSource свойства. Это SelectedItem должен быть точный экземпляр, который ItemsControl содержит.

5. Рекомендуется привязать ListBox.SelectedItem его к свойству вашей модели представления (или к какому-либо источнику данных) и изменить его с помощью этой привязки данных. Если вам нужна дополнительная помощь, пожалуйста, предоставьте более подробную информацию.