2012-03-04 9 views
0

최종 사용자에게 광고를 표시하는 Telerik TransitionControl이 있습니다. 로직은 광고 이미지가 뒤에서 비동기 적으로 다운로드되는 방식으로 작성됩니다. 컨트롤은 사용 가능한 이미지를 표시합니다. ObservableCollection을 사용하여 광고 이미지를 보유하고 있습니다. 이미지를 성공적으로 다운로드하면이 ObservableCollection에 새 이미지 정보가 추가됩니다. 그러나 Telerik TransitionControl은 새 이미지로 업데이트되지 않습니다.ObservableCollection에서 컨트롤을 업데이트하지 않습니다.

나는

코드

//Inside the AdvertUserControl.xaml.cs 

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

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

// ViewModel.cs 내부 아래와 같습니다 내부적으로 호출됩니다로 OnNotifyPropertyChanged를 필요로하지 않는 ObservableCollection에 호출 할 생각

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 ); 
     } 

} 

답변

0

관찰 가능 컬렉션에서 만든 읽기 전용 컬렉션 인스턴스 하나만 반환해야합니다. Observable 목록의 값을 변경하면 readonly 컬렉션을 통해 컨트롤이 새로 고쳐집니다.

1

나는 Telerik 컨트롤을 사용하지 않은,하지만 난 의심 그 다음

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; 
    } 
} 
에 당신의보기 모델

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

에 다음 코드를 변경하는 경우

관련 문제