簡體   English   中英

將列表綁定到WPF中的listboxitem

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM