#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
его к свойству вашей модели представления (или к какому-либо источнику данных) и изменить его с помощью этой привязки данных. Если вам нужна дополнительная помощь, пожалуйста, предоставьте более подробную информацию.