[英]WP7 : access and change controls inside a ListBox DataTemplate based on the data from the database
我知道这已经被问过了,但是我有点困惑! 到目前为止,我正在用MVVM编写我的应用程序。 但是现在我需要知道在列表框中的数据模板中访问控件的最佳方法是什么。 我想通过后面的代码访问它们,并且还能够基于数据库中的其他值来更改它们!
这是视图:
<ListBox Margin="0,8,0,0" toolkit:TiltEffect.IsTiltEnabled="True" x:Name="counterlist" ItemsSource="{Binding Groups}" HorizontalAlignment="Center" Tap="list_OnTap"
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Background="Orange" Width="125" Height="125" Margin="6">
<TextBlock Name="name" Foreground="White" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap"/>
<TextBlock Name="items" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
此列表框绑定到我的viewModel中的Groups Observable集合。 到目前为止,一切都很好。 现在我有一个方法叫做
public int ItemsinGroup(int gid)
该方法返回每个组中的项目数,但它不仅基于该数据库,而且还从外部来源获取一些信息,因此我不能简单地通过查询将其也添加到可观察的集合中。
我只需要将此添加到列表框中的每个项目,以便它显示每个组的关联项目计数。
我希望能够在后面的代码中对其进行更改。 我的意思是我想访问代码背后的每个数据循环以及XAML(我们已经通过绑定来实现)。 如果可以的话,很容易将ItemsinGroup结果注入到列表框循环中的相关项目中。 我可以通过将我的方法放在viewModel中来做到这一点吗? 但是循环中的当前项目如何,我如何找出列表框循环中每个组的当前ID是什么?
我需要知道做这些事情的最佳方法是什么,在这种情况下每个人通常都会做什么!
非常感谢
您想要使用MVVM并从背后的代码更新集合中的单个项目的愿望似乎矛盾。
最简单的解决方案可能是获取组的集合,然后在将它们绑定到UI之前,先遍历它们并将计数添加到集合中的对象。
或者,如果您想尽快绑定集合,然后更新它。 您可以在绑定后逐步浏览集合,只要集合中的对象实现INotifyPropertyChanged,您就可以更新它们,并在ItemTemplate中使用第二个TextBlock进行设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.