0

我知道以前有人问过这个问题,但我有点困惑!到目前为止,我正在使用 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 集合。到目前为止还不错。现在我有一个方法叫做

公共 int ItemsinGroup(int gid)

此方法返回每个组中的项目数,但它不仅基于此数据库,而且还从外部源获取一些信息,因此我不能简单地进行查询以将其添加到可观察集合中。

我只需要将它添加到列表框中的每个项目,以便它显示每个组的关联项目计数。

我希望能够在后面的代码中更改它。我的意思是我想在代码后面以及 XAML 中访问每个数据循环(我们已经通过绑定来做到这一点)。如果我可以这样做,那么将 ItemsinGroup 结果注入列表框循环中的相关项目将很容易。我可以通过将我的方法放在 viewModel 中来做到这一点吗?但是循环中的当前项目呢,我怎样才能找出列表框循环中每个组的当前 ID 是什么?

我需要知道做这些事情的最佳方法是什么,通常每个人在这些情况下都会做什么!

非常感谢

4

1 回答 1

0

Your desire to use MVVM and yet update individual items in a collection from code behind seem contradictory.

This simplest solution is probably to get your collection of groups and before you bind them to the UI you loop through them and add the count to the objects in your collection.

Alternatively, if you want to bind the collection as quickly as possible and then update it. You could step through the collection once bound and as long as the objects in your collection implement INotifyPropertyChanged you could update them and have a second TextBlock in the ItemTemplate show this when set.

于 2013-03-04T14:18:03.660 回答