2014-09-16 4 views
2

ListView이 있는데 ItemSource을 받으면 SelectedItem을 다시 평가하고 싶습니다. 사용자가 이미 ListView에서 항목을 선택한 경우 '기억'하는 것이 목표입니다.ItemSource를 변경 한 후 ListView의 SelectedItem을 다시 평가하십시오.

XAML :

<ListView 
    x:Name="_matchingTvShowsFromOnlineDatabaseListView" 
    Grid.Row="0" 
    Grid.Column="0" 
    Grid.RowSpan="3" 
    ItemsSource="{Binding AvailableMatchingTvShows}" 
    SelectedItem="{Binding AcceptedMatchingTvShow, Mode=TwoWay}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"/> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

SelectedItem도 내 VM의 속성에 바인딩됩니다.

VM는, :

public IWebApiTvShow AcceptedMatchingTvShow 
{ 
    get 
    { 
     IWebApiTvShow acceptedTvShow = null; 
     if (FoundTvShows.Count > 0) 
     { 
      var tvShowName = FoundTvShows[CurrentTvShow]; 
      acceptedTvShow = AvailableTvShowMatches[tvShowName].FirstOrDefault(webApiTvShow => webApiTvShow.Accepted); 
     } 
     return acceptedTvShow; 
    } 
    set 
    { 
     if (value != null) 
     { 
      var tvShowName = FoundTvShows[CurrentTvShow]; 
      var currentlyAcceptedTvShow = 
       AvailableTvShowMatches[tvShowName].FirstOrDefault(webApiTvShow => webApiTvShow.Accepted); 
      if (currentlyAcceptedTvShow != null) 
      { 
       currentlyAcceptedTvShow.Accepted = false; 
      } 
      value.Accepted = true; 
     } 
     OnPropertyChanged(); 
    } 
} 

내가 잘하면 내가 달성하기 위해 노력하고 무엇을 명확하게 내가 구축하고있는 응용 프로그램의 스크린 샷을했다.

enter image description here

아이디어는 사용자가 TV 프로그램을 탐색 할 때, 응용 프로그램이 관련된 TV 쇼를 기억하고 있다는 것입니다.

현재, 나는 TV 쇼를 연결, 다음 TV 쇼로 이동하고 다시, 아무것도

UPDATE (재산 AcceptedMatchingTvShow의 게터가 새로운 ItemSource을 설정 한 후 실행되지 않습니다)를 선택하지 않은 경우 :

추가 ("AcceptedMatchingTvShow") 때 ItemsSource의 B, 난 당신이하여 PropertyChanged를 올리면 같은데요 당신의 ViewModel을 모두 보지 않고 AvailableMatchingTvShows

private ObservableCollection<IWebApiTvShow> _availableMatchingTvShows; 
public ObservableCollection<IWebApiTvShow> AvailableMatchingTvShows 
{ 
    get { return _availableMatchingTvShows; } 
    set 
    { 
     _availableMatchingTvShows = value; 
     OnPropertyChanged("AcceptedMatchingTvShow"); 
    } 
} 
+0

'AvailableMatchingTvShows'와 관련된 코드를 게시 할 수 있습니까? – Sandesh

답변

1

에 대한 코드 SelectedItem 바인딩을 업데이트하는 변경 사항이 포함되어 있습니다.

+0

오른쪽! 때로는 솔루션이 너무 간단 할 수 있습니다. 많은 감사합니다 !! – bas