2014-03-27 147 views
0

我正在嘗試將項目樣式應用於我的列表框,並且沒有任何錯誤,並且它不工作,所以我嘗試從工作點開始,我甚至無法打印「世界你好」,我真的很困惑,因爲我已經與之前列表框工作,這是工作無法顯示列表框項目

編輯:

的XAML

<ListBox Width="200" Height="200" 
     ItemsSource="{Binding OCsTest, RelativeSource={RelativeSource 
          FindAncestor, AncestorType={x:Type Window}}}" 
     HorizontalContentAlignment="Stretch"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <TextBlock Text="{Binding}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

主要

public partial class MainWindow : Window 
{ 
    public ObservableCollection<string> OCsTest { get; set; } 
    public MainWindow() 
    { 
     InitializeComponent(); 
     OCsTest = new ObservableCollection<string> { "This", "is", "a", "test." }; 
    } 
} 
+1

張貼的代碼工作正常。你面臨什麼問題? –

回答

1

反轉在構造函數中語句的順序:強烈建議

public MainWindow() 
{ 
    OCsTest = new ObservableCollection<string> { "This", "is", "a", "test." }; 

    InitializeComponent(); 
} 

,你從代碼中移動的ObservableCollection遠落後到合適的視圖模型,並用其作爲窗口的DataContext的,但。

編輯:

由於您使用的是RelativeSource結合結合對窗口本身的屬性(這是不是一個好的做法,IMO)。問題是,由於Window沒有實現INotifyPropertyChanged,所以在調用InitializeComponent()之後設置屬性不會更新UI。

+0

工作正常,甚至沒有扭轉。 –

+1

@HighCore,這個命令與它有什麼關係? –

+0

@GarryVass你知道'InitializeComponent()'在WPF中做什麼嗎? –

0

您忘記實施INotifyPropertyChanged並在OCsTest上提高房產更改。您確實設置了OCsTest,但您從未將新值提升回UI,因此它不會顯示。

再加上你沒有做MVVM模式。這裏使用綁定有什麼好處?你爲什麼不直接使用ListBoxItemssSource屬性直接設置爲OCsTest