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のGroupsObservableコレクションにバインドされています。再びこれまでのところ良い。今、私はというメソッドを持っています

public int ItemsinGroup(int gid)

このメソッドは、各グループのアイテムの数を返しますが、このデータベースに基づいているだけでなく、外部ソースから情報を取得するため、これを監視可能なコレクションに追加するためのクエリを簡単に作成することはできません。

これをリストボックスの各アイテムに追加して、各グループに関連付けられているアイテム数を表示する必要があります。

コードビハインドで変更できるようにしたいと思います。つまり、コードビハインドのデータの各ループとXAML(バインディングを介してすでに行っている)にアクセスしたいということです。そうすることができれば、ItemsinGroupの結果をリストボックスループ内の関連アイテムに簡単に挿入できます。メソッドをviewModelに配置することでそれを行うことはできますか?しかし、ループ内の現在のアイテムについてはどうでしょうか。リストボックスループ内の各グループの現在のIDを確認するにはどうすればよいですか。

私はそのようなことをするための最良の方法は何であるか、これらの場合には通常誰もが何をするかを知る必要があります!

どうもありがとう

4

1 に答える 1

0

MVVMを使用しながら、コレクション内の個々のアイテムをコードビハインドから更新したいというあなたの願望は矛盾しているようです。

この最も簡単な解決策は、おそらくグループのコレクションを取得し、それらをUIにバインドする前に、それらをループして、コレクション内のオブジェクトにカウントを追加することです。

または、コレクションをできるだけ早くバインドしてから更新する場合。バインドされたコレクションをステップスルーでき、コレクション内のオブジェクトがINotifyPropertyChangedを実装している限り、それらを更新して、設定時にItemTemplateの2番目のTextBlockにこれを表示させることができます。

于 2013-03-04T14:18:03.660 に答える