2010-07-09 40 views
2

Silverlight新手。我正在开发一个聊天应用程序,将新的聊天消息添加到列表的底部。我有一个工作版本,在ScrollViewer中用作StackPanel,然后在使用StackPanel.Children.Add()后面的代码中使用。如何从ViewModel绑定StackPanel子项?

我试图将其转换为View-ViewModel方法,并且我无法弄清楚如何将StackPanel的子项绑定到任何集合属性。我试过这个:

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

其中ExampleTBs是在代码中创建的TextBlocks的集合。这失败了XAML解析,Children属性不能以这种方式绑定。

绑定到StackPanel本身的方法是否可修复?我应该使用不同的容器类型吗?我看到另一个问题,其中的人在代码中创建整个StackPanel,然后使用ContentPresenter ...

底线,我想找到一种方法来将我的视图绑定到视图模型,使用类似StackPanel的视图作为容器,随着时间的推移,连续的物品将被添加到容器中。最佳方法?

回答

2

使用ListBox(或任何其他ItemsControl),并绑定在你的视图模型的ItemsSource属性设置为一个ObservableCollection

+0

谢谢,这个工程,除了滚动到底部添加一个新的项目。关于你的头,你知道一个ViewModelly这样做的方式吗? – Matt 2010-07-09 16:59:04

+0

试试这个:http://stackoverflow.com/questions/2006729/wpf-listbox-scroll-when-item-added – GraemeF 2010-07-10 21:47:29

1

您是否需要使用StackPanel?如果您改为使用ItemsControl,它仍然会将每个聊天消息显示在垂直列表中,并且还允许绑定数据。