#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, иначе изменения в регистрах не будут приняты во внимание.