2014-03-27 2 views
0

내 목록 상자에 항목 스타일을 적용하려고하는데 오류가없고 작동하지 않아 작업 지점을 시작하려고했는데 " "세계 안녕하세요, 난 이후 정말 혼란 스러워요하기 전에 목록 상자와 함께 일했습니다 그것은목록 상자 항목을 표시 할 수 없습니다

편집 작업을했다 :

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

홈페이지

XAML

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

게시 된 코드가 올바르게 작동합니다. 당신이 직면 한 이슈는 무엇입니까? –

답변

1
는 ctor에있는 문장의 순서를 역

.

편집 : (IMO 좋은 방법이 아닙니다 인)

당신은 윈도우 자체의 속성에 바인딩하는 RelativeSource 바인딩을 사용하고 있기 때문에. 문제는 Window가 INotifyPropertyChanged를 구현하지 않기 때문에 InitializeComponent()을 호출 한 후에 속성을 설정해도 UI가 업데이트되지 않는다는 것입니다.

+0

역순으로 작업해도 문제가 없습니다. –

+1

@HighCore, 주문은 무엇을해야합니까? –

+0

@GarryVass'InitializeComponent()'가 WPF에서 무엇을하는지 알고 있습니까? –

0

INotifyPropertyChanged을 구현하고 OCsTest에서 속성 변경을 수행하는 것을 잊었습니다. OCsTest을 설정했지만 새로운 값을 UI으로 다시 올리지 않았으므로 표시되지 않습니다.

더하기 MVVM 패턴을 수행하지 않습니다. 바인딩을 사용하면 어떤 이점이 있습니까? OCsTestListBoxItemssSource 속성을 직접 설정하면됩니다. 당신이 적절한 뷰 모델에 뒤에 코드에서 떨어져 ObservableCollection에 이동하고 그 윈도우의 DataContext에 같은,하지만를 사용하는 것이

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

    InitializeComponent(); 
} 

그것은 좋습니다 :

관련 문제