您得到的错误可能是:
在使用 ItemsSource 之前,项目集合必须为空。
绑定可能没有问题....您最大的问题是无效的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
……DataContext
它可能是……因为你得到了这个结果。你应该检查的是,FileInfo
课堂是programName
作为公共财产。
它应该是这样的。
public class FileInfo : ObservableObject
{
private string _programName;
public string programName
{
get{ return this._programName;}
set
{
this._programName = value;
RaisePropertyChanged(() => this.programName);
}
}
}