将对象列表绑定到列表框

时间:2013-05-13 10:28:44

标签: c# wpf listbox

我有以下XAML代码

        <ListBox x:Name="TrackedProgramList" Height="145" Width="605" ItemsSource="  {Binding}" >
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Path=programName}"></TextBlock>
                </StackPanel>
            </DataTemplate>
        </ListBox>

我正在将List绑定到Listbox的ItemsSource。 List包含“FileInfo”对象。 FileInfos是一个具有某些属性的对象,如“programName”,“manufacturer”等。

现在的问题是列表只显示如下内容:

 Namespace.FileInfo
 Namespace.FileInfo
 Namespace.FileInfo
 ...

所以我认为路径不正确。

1 个答案:

答案 0 :(得分:1)

你得到的错误可能是:

  

在使用ItemsSource之前,项目集合必须为空。

可能绑定没问题....你的bigest问题是无效的xaml。

我不确定您要实现的目标,但我想您希望将列表框与Stackpanel作为ItemsPanel

那应该是这样的:

<ListBox ... >
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
             <StackPanel Orientation="Horizontal" IsItemsHost="True"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

然后你可能想提供ItemTemplate

<ListBox ... >
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
             <StackPanel Orientation="Horizontal" IsItemsHost="True"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
   <ListBox.ItemTemplate>
       <DataTemplate>
           <Border Background="Red" Width="150" Height="100">
               <TextBlock Text="{Binding Path=programName}" />
           </Border>
       </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

修改

编辑完问题后,您似乎遇到了新问题。 仍然......你的XAML不应该正常工作。如果您使用了自己提供的问题。这是无效的。

如果你得到的结果如下:

Namespace.FileInfo
Namespace.FileInfo
Namespace.FileInfo
Namespace.FileInfo

然后你在ItemTemplate中的绑定无法正常工作。确保programName是公共财产。

  

用作绑定的绑定源属性的属性必须是类的公共属性。无法为绑定目的访问明确定义的接口属性,也无法访问没有基本实现的受保护,私有,内部或虚拟属性。

正如我所说。我的代码运行正常。

<强>更新

List<FileInfo>应该是ListBox的{​​{1}} ...它可能是......因为你得到了这个结果。您应该检查的是DataContextFileInfo是公共财产。

它应该是这样的。

programName