2012-04-05 12 views
1

arbeitet nicht aus für mich:An eine ListBox von UserControl Elements binden? Diese

<StackPanel> 
    <ListBox x:Name="MyListBox" 
     ItemsSource="{StaticResource UserControlsCollection}"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
    </ListBox> 
    <UserControl 
     Content="{Binding ElementName=MyListBox, Path=SelectedValue}" 
     /> 
</StackPanel> 

ich diesen bei Laufzeitfehler „Punkt nicht innerhalb des erwarteten Bereichs“. Dies sind die Daten:

<toolkit:ObjectCollection x:Key="UserControlsCollection"> 
    <UserControl Style="{StaticResource UserControlListItemStyle}"> 
     <Button>One Button</Button> 
    </UserControl> 
    <UserControl Style="{StaticResource UserControlListItemStyle}"> 
     <ComboBox> 
      <ComboBoxItem Content="One" IsSelected="True" /> 
      <ComboBoxItem Content="Two" /> 
      <ComboBoxItem Content="Three" /> 
     </ComboBox> 
    </UserControl> 
    <UserControl Style="{StaticResource UserControlListItemStyle}"> 
     <Rectangle 
      Fill="Red" 
      Width="120" Height="120" 
      /> 
    </UserControl> 
</toolkit:ObjectCollection> 
+0

Ich habe dies mit Silverlight 4 und April Silverlight Toolkit getestet, es hat gut funktioniert. Ich hatte jedoch nicht Ihren Stil "UserControlListItemStyle". Welche Version verwendest du und wie sieht dein Style aus? –

+0

BEARBEITEN am letzten Kommentar: Der Fehler tritt bei der Auswahl eines Elements auf. In diesem Fall bekomme ich auch den Fehler. Ich werde mehr darüber nachsehen. –

Antwort

0

Sie versuchen, die gleichen FrameworkElements (jene in der Sammlung) angezeigt werden zweimal: Einmal als Elemente in der List-Box, und nach der Auswahl eines zweites Mal in dem gebundenen Usercontrol.

Alle FrameworkElements können nur einmal in den visuellen Baum eingebunden werden (dh wenn sie das geladene Ereignis auslösen).

Um zu erreichen, was Sie versuchen, müssen Sie Modelle und Ansichten trennen. Die Modelle befinden sich in Ihrer Auflistung und können von jedem Typ sein. Sie implementieren normalerweise INotifyPropertyChanged oder stammen von DependencyObject. Ihre Ansichten können DataTemplates als Ressourcen sein, wobei das Target-Attribut der Typ des Modells ist.

Seit SL5 wird jedes ContentControl mit dem Modell als Inhalt (ebenso wie ListBox mit den Modellen als Elemente der gebundenen Sammlung) diese DataTemplates automatisch aufnehmen, wenn sie sich im Bereich befinden. Die Vorlagen werden dann möglicherweise mehrfach für jedes Modell instanziiert.

Verwandte Themen