dans mon Silverlight 4 Application, j'ai une liste observable d'une classe définie par l'utilisateurObtenir le ListItem d'une liste Databound dans Silverlight
ObservableCollection<MyClass> myList;
public class MyClass
{
public string Name { get; set; }
public string Value { get; set; }
}
J'afficher cette liste dans une zone de liste, en utilisant la liaison de données et un modèle pour la ListBoxItems:
<ListBox x:Name="ListBoxCharacteristics" Background="{x:Null}" HorizontalAlignment="Left" >
<!-- DataTemplate to display the content -->
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="StackPanelBorder" Orientation="Horizontal" HorizontalAlignment="Left">
<TextBox x:Name="TextBoxCharacteristicName" Style="{StaticResource InputTextBox}" Text="{Binding Name}" />
<TextBox x:Name="TextBoxSep" Style="{StaticResource ReadOnlyTextBox}" Text="=" />
<TextBox x:Name="TextBoxValue" Style="{StaticResource InputTextBox}" Text="{Binding Value}" LostFocus="FormulaTextBox_LostFocus" TextChanged="Formula_TextChanged"/>
<Button x:Name="ButtonCheck" Style="{StaticResource RoundWebdingButton}" Content="s" Click="ButtonCheck_Click" />
<Button x:Name="ButtonAccept" Style="{StaticResource RoundWebdingButton}" Content="a" Click="ButtonAccept_Click" />
<Button x:Name="ButtonRemove" Style="{StaticResource RoundWebdingButton}" Content="r" Click="ButtonRemove_Click" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
l'utilisateur peut modifier les valeurs dans les champs de saisie et peut utiliser les boutons pour vérifier l'entrée, l'accepter (écrire au modèle sous-jacent) ou supprimer l'entrée. Pour manipuler le modèle sous-jacent, j'ai besoin d'accéder à l'élément associé (qui est affiché dans le listboxitem, où l'utilisateur a cliqué sur le bouton).
Une idée pour obtenir l'élément était d'utiliser SelectedItem - Property, qui contiendra l'instance voulue de MyClass. Le problème est que cliquer sur un bouton ou une zone de texte ne sélectionne pas le ListBoxItem contenant. L'utilisateur doit d'abord sélectionner manuellement l'élément Listbox en cliquant quelque part sur l'élément, où aucune zone de texte ou bouton n'est affiché. Sinon, SelectedItem sera nul. Je pourrais obtenir le TextBox TextBoxCharacteristicName via l'objet parent du bouton, mais comme l'utilisateur doit aussi pouvoir modifier ce contenu, je serais incapable d'obtenir l'élément correct en utilisant cette propriété comme identifiant.
Toute autre idée, comment savoir, quelle instance MyClass est celle qui est affichée dans le ListBoxItem correspondant?
Merci à l'avance,
Frank