0

ページに「連絡先」オブジェクトのObservableCollectionを実装し、それをlonglistselectorのitemsourceとして設定しました。「連絡先」オブジェクトのすべてのプロパティは、INotifyPropertyChangedを実装します。リストとプロパティは、ObserveableCollectionに追加されると正常に表示されます。ただし、コード内のプロパティの1つを変更すると、ページを離れて戻るまで、変更はUIに反映されません。したがって、データバインドされたプロパティはリアルタイムで更新されません。

XAMLページから:

public ObservableCollection<Contact> contacts = new ObservableCollection<Contact>();

Contact[] data = ContactHandler.Singleton().GetContacts().Values.OrderBy(x => x.DisplayName.ToLower()[0]).ToArray();
        int dataCount = data.Length;

        this.LayoutRoot.Dispatcher.BeginInvoke(() =>
        {
            for (int x = 0; x < data.Length; x++)
            {
                contacts.Add(data[x]);
            }
});

ここで、「連絡先」の「ハイライト」プロパティを更新します。

private void contactList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Contact contact = contactList.SelectedItem as Contact;

        if (contact != null)
        {
            Debug.WriteLine(contact.DisplayName + " is: " + contact.Highlight);

            string uid = contact.UserID;
            if (uids.Contains(uid))
            {
                uids.Remove(uid);
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    contact.Highlight = Visibility.Collapsed;
                });
            }
            else
            {
                uids.Add(uid);
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    contact.Highlight = Visibility.Visible;
                });
            }

}

4

1 に答える 1

0

わかりました、だから私はばかです。

教訓。コレクション内のオブジェクト (私の場合は Contact) が INotifyPropertyChanged を継承することを忘れないでください。私はそれを実装していましたが、継承していませんでした。

于 2013-02-25T22:06:11.247 に答える