[英]Bind list to listboxitem in wpf
我正在嘗試將列表綁定到WPF中的列表框。 但這似乎不起作用,我在屏幕上什么也看不到。
這是我的代碼:
WPF
<ListBox x:Name="listBox" HorizontalAlignment="Left" Height="453" VerticalAlignment="Top" Width="119" Margin="0,43,0,0" ItemsSource="{Binding orderlist}">
<ListBoxItem Content="{Binding orderlist.ID}"></ListBoxItem>
</ListBox>
C#
Order order = new Order();
Klantgegevens klantgegevens = new Klantgegevens();
XmlReader rdr = XmlReader.Create(@"C:\Users\Gebruiker\Desktop\EDI\Rekening.xml");
rdr.ReadToFollowing("datum");
order.DatumOntvangst = rdr.ReadElementContentAsString();
rdr.ReadToFollowing("volgnr");
order.Status = "Aangenomen";
order.Opmerkingen = "";
rdr.ReadToFollowing("naam");
order.Afzender = rdr.ReadElementContentAsString();
rdr.ReadToFollowing("naam");
klantgegevens.Naam = rdr.ReadElementContentAsString();
rdr.ReadToFollowing("straat");
klantgegevens.Straat = rdr.ReadElementContentAsString();
rdr.ReadToFollowing("huisnr");
klantgegevens.Huisnummer = rdr.ReadElementContentAsInt();
rdr.ReadToFollowing("plaats");
klantgegevens.Woonplaats = rdr.ReadElementContentAsString();
rdr.ReadToFollowing("postcode");
klantgegevens.Postcode = rdr.ReadElementContentAsString();
rdr.ReadToFollowing("telefoonnr");
klantgegevens.Telefoonnummer = rdr.ReadElementContentAsString();
order.Klantgegevens = klantgegevens;
orderlist.Add(order);
listBox.DataContext = orderlist;
您可能知道,Order是一個自定義類,Klantgegevens也是如此。 一般來說,我對綁定和WPF還是很陌生,請原諒我的愚蠢:)
您需要將ListView的ItemsSource屬性設置或綁定到IEnumerable。 由於已將DataContext屬性設置為“訂單列表”,因此應將ItemsSource屬性直接綁定到DataContext(ItemsSource =“ { Binding }”)。 您還應該使用Fruchtzwerg建議的ItemTemplate:
<ListBox x:Name="listBox" HorizontalAlignment="Left" Height="453" VerticalAlignment="Top" Width="119" Margin="0,43,0,0" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ID}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
還要注意,ItemTemplate的DataContext是ItemsSource中的一個項目,在這種情況下即為Order對象。 因此,要綁定到Order對象的“ ID”屬性,請使用上面的綁定語法。 “ ID”必須是Order類的公共屬性。
用
<ListBoxItem Content="{Binding orderlist.ID}"></ListBoxItem>
您正在XAML中添加項目。 但是您的計划是創建一個模板來顯示綁定項目。 最簡單的解決方案是使用
<ListBox x:Name="listBox" DisplayMemberPath="ID"/>
如果只需要呈現一個屬性。 通過創建如下模板可以顯示多個屬性
<ListView x:Name="listBox">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding ID}" />
<TextBlock Text="{Binding datum}"/>
<!-- ... -->
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
此外,您應該使用類似
public ObservableCollection<Klantgegevens> Items { get; } =
new ObservableCollection<Klantgegevens>();
綁定。 使用此屬性,將具有ListView
的整個Window的DataContext
設置為對象。 之后,您可以將ListView與
<ListView ItemsSource="{Binding Items}"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.