数据未绑定到ListBox WPF

时间:2017-11-19 10:56:36

标签: c# wpf

XAML

<Page x:Class="ManufacturingWPF.ShowHardware"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:local="clr-namespace:ManufacturingWPF"
  mc:Ignorable="d" 
  d:DesignHeight="300" d:DesignWidth="300"
  Title="ShowHardware">



<Grid Background="AliceBlue">
    <ListBox x:Name="HardwareList" ItemsSource="{Binding Hardware}"  HorizontalAlignment="Left" Height="122" Margin="76,36,0,0" VerticalAlignment="Top" Width="149">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding ID}"/>
                    <TextBlock Text="{Binding Date}"/>
                    <TextBlock Text="{Binding Nodes}"/>
                    <TextBlock Text="{Binding Repeaters}"/>
                    <TextBlock Text="{Binding Hubs}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

</Grid>

C#背后的代码

public partial class ShowHardware : Page
{
    public ShowHardware()
    {
        InitializeComponent();
        DisplayData();

    }

    public void DisplayData()
    {
         //Datamodel MDM used for ADO and table creation
         //Test is a class used to pass the model and as the name suggest 
         test it

        ManufacturingDataModel MDM = new ManufacturingDataModel();
        Test t = new Test(MDM);

        List<Hardware> x = t.GetHardware();

        foreach(Hardware i in x )
        {
            HardwareList.ItemsSource = i.Hubs.ToString();
        }
    }

}

}

我遇到了将数据绑定到列表框的问题,如XAML和代码隐藏内容所示。 我没有任何运气就尝试了以前的答案,做了我的研究,但显然我错过了一些东西,或者有些东西我不太了解。 名称建议的Itemsource应该绑定到我的数据所在的来源。在这种情况下,源代码将是我的类硬件,它包含节点,日期,集线器等的数据。 在文本块中,我手动绑定这些属性并显示值。 但这不起作用。 附:我的数据库表已填充。

2 个答案:

答案 0 :(得分:0)

此代码似乎错误

foreach(Hardware i in x )
{
    HardwareList.ItemsSource = i.Hubs.ToString();
}

然后,用于绑定的ItemsSource必须是一个集合(ListObservableCollecionIEnumerable<> ...)。

尝试HardwareList.ItemsSource = x;并移除foreach loop

我希望这可以帮到你。

答案 1 :(得分:0)

那是因为ItemsSource是一个IEnumerable,你可以为它分配硬件本身列表。所以你的代码应该是这样的:

ManufacturingDataModel MDM = new ManufacturingDataModel();
Test t = new Test(MDM);

 List<Hardware> x = t.GetHardware();
 HardwareList.ItemsSource = x;

//or
foreach (Hardware h in x)
  HardwareList.Items.Add(h);