2013-05-13 85 views
-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> 

我綁定列表到ListBox的的ItemsSource。 列表包含「FileInfo」對象。 FileInfos是一個像「PROGRAMNAME」一些屬性的對象,「製造商」等

現在的問題是,列表僅顯示是這樣的:

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

,所以我認爲,路徑不正確。

+5

'但我得到以下錯誤'什麼錯誤....? – DGibbs 2013-05-13 10:30:17

+0

一個猜測,你從來沒有提到的錯誤,但看看BindingList – 2013-05-13 10:32:58

+0

編輯後。那麼......似乎不太可能...在ListBox和/ ListBox標籤之間應該有Items ...而不是DataTemplate!另外你正在使用ItemsSource,所以應該沒有任何東西。 – 2013-05-13 11:26:02

回答

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是公共財產。

您用作綁定綁定源屬性的綁定屬性必須是您的類的公共屬性。顯式定義的接口屬性不能用於綁定目的,也不能訪問沒有基本實現的受保護的,私有的,內部的或虛擬的屬性。

正如我所說。我的代碼工作正常。

UPDATE

List<FileInfo>應該是ListBoxDataContext ...這可能是...因爲你得到這樣的結果。你應該檢查的是在FileInfo類是programName作爲公共財產。

它應該是這樣的。

public class FileInfo : ObservableObject 
{ 
    private string _programName; 

    public string programName 
    { 
     get{ return this._programName;} 
     set 
     { 
      this._programName = value; 
      RaisePropertyChanged(() => this.programName); 
     } 
    } 
} 
+0

嗨,感謝您的回答。我用幾乎相同的結果嘗試了你的xaml。 屬性是公開的:公開列表追蹤=新列表(); – Laokoon 2013-05-14 06:12:43

+0

@Laokoon你在評論中寫的不是財產,這不重要。該列表應該設置爲LisBox的DataContext ...應該是公共屬性是programName。請參閱Update2 – 2013-05-14 08:22:28

+0

@Lokoon您可能不需要讓FileInfo類從ObservableObject繼承。並且不會有RaisePropertyChanged。 – 2013-05-14 08:32:15