-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>

List を Listbox の ItemsSource にバインドしています。List には「FileInfo」オブジェクトが含まれています。FileInfos は、「programName」、「manufacturer」などの属性を持つオブジェクトです。

問題は、リストに次のようなものしか表示されないことです。

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

したがって、パスが間違っていると思います。

4

1 に答える 1

1

あなたが得ているエラーはおそらく次のとおりです。

ItemsSource を使用する前に、Items コレクションを空にする必要があります。

おそらくバインディングに問題はありません....あなたの最大の問題は無効な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);
      }
   }
}
于 2013-05-13T10:51:15.323 に答える