-6

我有以下 XAML 代码

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

我将一个列表绑定到列表框的 ItemsSource。该列表包含“FileInfo”对象。FileInfos 是一个具有一些属性的对象,如“programName”、“manufacturer”等。

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

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

所以我认为路径不正确。

4

1 回答 1

1

您得到的错误可能是:

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

绑定可能没有问题....您最大的问题是无效的xaml。

我不确定您要实现什么目标,但我想您希望将列表框水平设置StackpanelItemsPanel.

那么它应该是这样的:

<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);
      }
   }
}
于 2013-05-13T10:51:15.323 回答