0

アプリに LongListSelector を含むページがあります。また、主にいくつかの文字列を保持するカスタム クラスである streamItem のアイテムを含む ObservableCollection もあります。ページの読み込み時に、LongListSelector の ItemsSource を ObservableCollection に設定しました。LongListSelector は、データ バインディングが適切に機能して、期待どおりに streamItems を表示するようになりました。

しかし、今度は streamItem を更新したいと思います。たとえば、これらの項目の 1 つの文字列を変更したいとします。データ バインディングのおかげで、この変更がすぐに LongListSelector に反映されることを期待していますが、そうはなりません。

ItemsSource で何かを変更するとすぐに LongListSelector を更新するにはどうすればよいですか? これが私が使用しているコードの凝縮されたセットです。

streamItem クラス:

Public Class streamItem
    Public Property headerText As String
    Public Property msgText As String
End Class

ObservableCollection である変数 tableData の宣言:

Public Shared tableData As New ObservableCollection(Of streamItem)

ページの読み込み時に、項目を tableData に追加し、LongListSelector (その名前は tblStream) の ItemsSource を設定します。

Dim newItem As New App.streamItem
newItem.headerText ="Header"
newItem.msgText = "Some other text"
App.tableData.Add(newItem)

tblStream.ItemsSource = App.tableData

XAML 部分:

<phone:LongListSelector x:Name="tblStream">
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0" Orientation="Vertical">
                <TextBlock Text="{Binding headerText}" />
                <TextBlock Text="{Binding msgText}" />
            </StackPanel>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>

テストするために、これを行うボタンを作成しました。

App.tableData.Item(0).msgText = "Text changed."

クリックすると、LongListSelector にこの変更が反映されると思っていましたが、何も起こりません。これを修正するにはどうすればよいですか? 前もって感謝します。

4

1 に答える 1

1

ObservableCollectionアイテムが挿入/削除/移動されたときにビューに通知します。すでにコレクションにあるアイテムのプロパティの変更を確認したい場合は、アイテム クラス (この場合はstreamItem) を実装INotifyPropertyChangedして、プロパティを設定するときにこのイベントを発生させる必要があります。

于 2013-08-13T22:51:39.157 に答える