2010-07-09 4 views
2

Nouveauté de Silverlight. Je travaille sur une application de chat où de nouveaux messages de discussion sont ajoutés en bas d'une liste. J'ai eu une version de travail qui a utilisé comme StackPanel dans un ScrollViewer et ensuite dans un code derrière utilisé StackPanel.Children.Add(). J'essaie de convertir cela en une approche View-ViewModel, et je ne peux pas comprendre comment lier les enfants du StackPanel à n'importe quelle propriété de collection. J'ai essayé ceci:Comment lier des enfants StackPanel à partir d'un ViewModel?

<ScrollViewer Name="scrollMessages" Grid.Row="2" Margin="0,0,0,0" VerticalScrollBarVisibility="Visible"> 
    <StackPanel x:Name="pnlMessages" Orientation="Vertical" Children="{Binding Path=ExampleTBs}" /> 
</ScrollViewer> 

où ExampleTBs est une collection de TextBlocks créés en code. Cela échoue l'analyse XAML, la propriété Children n'est pas lisible de cette manière.

L'approche de la liaison au StackPanel est-elle réparable? Dois-je utiliser un type de conteneur différent? J'ai vu une autre question où le gars a créé l'ensemble StackPanel dans le code et a ensuite utilisé un ContentPresenter ...

En conclusion, j'aimerais trouver un moyen de classer ma vue à un viewmodel en utilisant quelque chose comme un StackPanel en tant que conteneur où les éléments successifs seront ajoutés au conteneur au fil du temps. Meilleure approche?

Répondre

2

Utilisez un ListBox (ou tout autre ItemsControl) et lier la propriété ItemsSource à un ObservableCollection dans votre ViewModel.

+0

Merci, cela fonctionne, sauf pour faire défiler vers le bas lors de l'ajout d'un nouvel élément. Est-ce que vous connaissez une façon ViewModelly de le faire? – Matt

+0

Essayez ceci: http://stackoverflow.com/questions/2006729/wpf-listbox-scroll-when-item-added – GraemeF

1

Avez-vous besoin d'utiliser un StackPanel? Si vous utilisez un ItemsControl à la place, cela affiche toujours chaque message de discussion dans une liste verticale et permet également la liaison des données.

Questions connexes