2010-12-15 12 views
0

Verwenden von Silverlight 4/MVVM.Silverlight MVVM, das eine ListBox bindet

Ich versuche, ein ViewModel an eine Listbox mit einer benutzerdefinierten Vorlage zu binden, aber die Daten werden nicht angezeigt. Es ist mir gelungen, Rohdaten zur Anzeige zu bringen, wenn ich die DisplayMemberPath-Eigenschaft festlege. Wenn ich diese Eigenschaft entferne und versuche, an die Textblöcke zu binden, wird nichts angezeigt. Hier ist die XAML

<ListBox Height='200' 
      HorizontalAlignment='Left' 
      Margin='10,10,0,0' 
      Name='lstForumTopics' 
      VerticalAlignment='Top' 
      Width='200' 
      DataContext='{Binding Path=ForumTopics,Source={StaticResource ForumViewModel}}' 
      ItemsSource='{Binding Path=ForumTopics,Source={StaticResource ForumViewModel}}'> 
     <ListBox.ItemTemplate> 

      <DataTemplate> 
       <StackPanel Orientation='Vertical'> 
        <TextBlock Text='{Binding ForumTopicText,Source={StaticResource ForumViewModel}}'></TextBlock> 
        <TextBlock Text='{Binding PostCount,Source={StaticResource ForumViewModel}}'></TextBlock> 
       </StackPanel> 
      </DataTemplate> 

     </ListBox.ItemTemplate> 
     <ListBox.Background> 
      <LinearGradientBrush EndPoint='0.5,1' 
           StartPoint='0.5,0'> 
       <GradientStop Color='#FFDCE2E5' 
           Offset='1' /> 
       <GradientStop Color='White' 
           Offset='0' /> 
      </LinearGradientBrush> 
     </ListBox.Background> 
    </ListBox> 

Antwort

0

Ich glaube, Sie verwechseln die Binding-Engine. Wenn Sie ein Static versucht verwenden werden ...

DataContext="{Binding Source={StaticResource ForumViewModel}}" 
ItemsSource="{Binding Path=ForumTopics}" 

<TextBlock Text="{Binding Path=ForumTopicText}" /> 
<TextBlock Text="{Binding Path=PostCount}" /> 

ein Steuerelement ein Datacontext, die das Objekt hält, dass die anderen Eigenschaften binden. Die ItemsSource muss nur den Eigenschaftsnamen des DataContext-Objekts kennen, an das das Objekt gebunden werden soll. Schließlich verfügt die DataTemplate über ein DataContext-Set für jedes Objekt in Ihrer Elementquelle, sodass sie nur an den Eigenschaftsnamen des Objekts in Ihrer ItemsSource gebunden werden müssen.

0

Ich glaube, Sie brauchen die ItemsSource des ListBox zu einem ObservableCollection oder IEnumerable von ForumViewModel s Bindung, nicht nur einen einzigen.

+0

Ich habe das Problem behoben - es war die bindende Syntax der Textblöcke – Greg

Verwandte Themen