ObservableCollection не обновляет элемент управления - PullRequest
0 голосов
/ 05 марта 2012

У меня есть Telerik TransitionControl, который отображает рекламу для конечного пользователя.логика написана таким образом, что рекламные изображения будут загружаться в асинхронном режиме сзади.элемент управления будет отображать изображения в том виде, в котором они доступны.Я использую ObservableCollection для хранения рекламных изображений. Новая информация об изображениях добавляется в эту ObservableCollection, когда изображение успешно загружается.Однако Telerik TransitionControl не обновляется новыми изображениями.

Я считаю, что ObservableCollection не нужно вызывать OnNotifyPropertyChanged, поскольку он будет вызываться внутренне

Код указан ниже

//Inside the AdvertUserControl.xaml.cs

ViewModel vm = new ViewModel();
DataContext = vm;

this.radControl.SetValue(AdRotatorExtensions.AdRotatorExtensions.ItemsSourceProperty, vm.SquareAdsVertical);

// Внутри ViewModel.cs

 public ReadOnlyObservableCollection<Advert> SquareAdsVertical
        {
            get
            {
                if (AdsManager.VerticalAds == null)
                {

                    return null;
                }
                return new ReadOnlyObservableCollection<Advert>(AdsManager.VerticalAds);
            }
        }


// Inside DownloadManager.cs
   private static ObservableCollection<Advert> adsToShowVertical = new ObservableCollection<Advert>();
public static ObservableCollection<Advert> VerticalAds
        {
            get { if (adsToShowVertical != null) return adsToShowVertical;
                return null;
            }
        }

 public static void OnDownloadComplete(Object sender, AsyncCompletedEventArgs e)
{
        try
        {


    if(!e.Cancelled)
    {

        if (e.Error == null)
        {
            Advert ad = e.UserState as Advert ;
         adsToShowVertical.Add(ad  );
        }

}

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Я не использовал элементы управления Telerik, но подозреваю, что если вы измените следующий код в вашей View Model

public ReadOnlyObservableCollection<Advert> SquareAdsVertical 
{ 
    get 
    { 
        if (AdsManager.VerticalAds == null) 
        { 
            return null; 
        } 
        return new ReadOnlyObservableCollection<Advert>(AdsManager.VerticalAds); 
    } 
} 

К следующему

private ReadOnlyObservableCollection<Advert> _readonlyAds;
public ReadOnlyObservableCollection<Advert> SquareAdsVertical 
{ 
    get 
    { 
        if (AdsManager.VerticalAds == null) 
        { 
            return null; 
        } 
        else if (_readonlyAds == null)
        {
            // Only one instance of the readonly collection is created
            _readonlyAds = new ReadOnlyObservableCollection<Advert>(AdsManager.VerticalAds);
        }

        // Return the read only collection that wraps the underlying ObservableCollection
        return  _readonlyAds;
    } 
} 
0 голосов
/ 05 марта 2012

Вам нужно вернуть только один экземпляр коллекции только для чтения, созданной из вашей наблюдаемой коллекции. Если вы измените значение в списке Observable, ваш элемент управления будет обновлен через коллекцию readonly.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...