Список, показывающий одно свойство в разных строках

#c# #wpf #xaml #listbox

#c# #wpf #xaml #listbox

Вопрос:

Я использую следующий код для привязки ListBox к списку, т. е. List и устанавливаю путь привязки=Name. Но в списке отображается только одно имя с буквой, разделенной на строки. Например, если имя ДЖОН, в строке списка 1 отображается «J», в строке 2 — «O», в строке 3 — «H», в строке 4 — «N». Вот код.

Xaml

 <ListBox Height="Auto" ItemsSource="{Binding Path=Name}" HorizontalAlignment="Stretch" Margin="0,80,0,0" Name="ledgerListView" VerticalAlignment="Stretch" Width="200" KeyDown="ledgerListView_KeyDown" MouseDoubleClick="ledgerListView_MouseDoubleClick" IsSynchronizedWithCurrentItem="True" />
  

Скрытый код

 List<Ledgers> ledgers = new List<Ledgers>();
        ledgers = DAL_Ledgers.LoadLedgers();
        this.DataContext = ledgers;
  

Ответ №1:

Свойство ItemsSource должно быть привязано к исходной коллекции, из которой вы хотите сгенерировать элементы списка. В данном случае это был бы просто DataContext. Чтобы отобразить имя для каждого элемента, вы можете либо применить DataTemplate к свойству ItemTemplate, содержащему то, что вы хотите отобразить для каждого элемента, либо для простого случая, подобного этому, просто использовать DisplayMemberPath для указания свойства Name.

 <ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" x:Name="ledgerListView"/>
  

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

1. Ваше решение просто отлично работает для решения других проблем, кроме одной. Я выполняю код поиска для целей фильтрации, который не работает. Вот код : List<Ledgers> ledgers = new List<Ledgers>(); ledgers = DAL_Ledgers.LoadLedgers(); this.DataContext = ledgers; ICollectionView view = CollectionViewSource.GetDefaultView(ledgers); new TextSearchFilter(view, this.searchTextBox);

2. Вам следует создать новый вопрос с более подробной информацией, если у вас возникла отдельная проблема с фильтрацией.

Ответ №2:

Похоже, вы привязываетесь к неправильной вещи… Работает ли это, если вы используете:

 <ListBox ItemsSource="{Binding}" ...>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <sdk:Label Content="{Binding Path=Name}" />
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>
  

Ответ №3:

Кроме того, вы можете захотеть использовать ObservableList, иначе изменения в регистрах не будут приняты во внимание.