2012-10-16 2 views
2

내 ICollectionView가 새로 고쳐지지 않는 이유를 설명 할 수 없습니다. 아무도 내가 뭘 잘못 설명 할 수 있습니까? 이 같은ICollectionView가 새로 고쳐지지 않는 이유는 무엇입니까?

class ViewModel : INotifyPropertyChanged 
{ 
    private ObservableCollection<Entity> m_entities = new ObservableCollection<Entity>(); 
    public ICollectionView EntitiesView { get; private set; } 
    public ICollectionView HighCountView { get; private set; } 

    public ViewModel() 
    { 
     m_entities.Add(new Entity() { Id = 1, Name = "Erik", Description = "The first" }); 
     m_entities.Add(new Entity() { Id = 2, Name = "Olle", Description = "The second" }); 
     m_entities.Add(new Entity() { Id = 3, Name = "Kim", Description = "The last" }); 


     EntitiesView = CollectionViewSource.GetDefaultView(m_entities); 
     EntitiesView.CurrentChanged += new EventHandler(EntitiesView_CurrentChanged); 

     HighCountView = new CollectionView(m_entities); 
     using (HighCountView.DeferRefresh()) 
     { 
      HighCountView.Filter = e => ((Entity)e).Count > 3; 
     } 

    } 

    private void EntitiesView_CurrentChanged(object sender, EventArgs e) 
    { 
     Entity current = EntitiesView.CurrentItem as Entity; 
     if(current!=null) 
     { 
      current.Count++; 
      HighCountView.Refresh();   // Do I need this line? 
      OnPropertyChanged("HighCountView"); // or this? 
     } 
    } 

은 ... 그리고 내 방 창문에서 나는 데이터 컨텍스트로 사용 :

public partial class MainWindow : Window 
{ 
    private ViewModel vm = new ViewModel(); 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     this.DataContext = vm; 
    } 
} 

을 ... 그리고 난

나는이 같은 뷰 모델을 만들었어요 m이 같은 XAML 코드에서 내 바인딩을 수행 :

문제는 세 가지 엔티티는 항상 listView2 데에 표시됩니다 것을
<ListBox Grid.Column="0" x:Name="listView1" DisplayMemberPath="Name" ItemsSource="{Binding EntitiesView}" IsSynchronizedWithCurrentItem="True" /> 
    <ListView Grid.Column="1" x:Name="listView2" DisplayMemberPath="Name" ItemsSource="{Binding HighCountView}" IsSynchronizedWithCurrentItem="True" /> 

나는 Filter 속성을 설정했다. 왜? 여기에 샘플이 완료하게하려면

편집

은 엔티티 - 클래스입니다.

class Entity : INotifyPropertyChanged 
{ 
    private int m_id; 
    public int Id 
    { 
     bla bla..... 
    } 

    private string m_name; 
    public string Name 
    { 
     bla bla..... 
    } 

    private string m_description; 
    public string Description 
    { 
     bla bla..... 
    } 


    private int m_count; 
    public int Count 
    { 
     get { return m_count; } 
     set 
     { 
      if (value != m_count) 
      { 
       m_count = value; 
       OnPropertyChanged("Count"); 
      } 
     } 
    } 

    public void Update() 
    { 
     Description = "Updated: " + (++Count).ToString() + " times."; 
    } 
+0

Entity 클래스의 코드를 추가하십시오. – Ekk

+0

이제 Entity 클래스가 추가되었습니다. –

+0

이것을 시도해 볼 수 있습니까? var savedhighcount = HighCountView; HighCountView = null; OnPropertyChanged ("HighCountView"); HighCountView = savedhighcount; OnPropertyChanged ("HighCountView"); ..... 당신의 CurrentChanged에없는 하단의 생성자에서만 이것을 수행하십시오. –

답변

1

마지막으로 나는 틀린 것을 발견했다. 내가 라인 변경하는 경우

:

HighCountView = new CollectionView(m_entities); 

HighCountView = new ListCollectionView(m_entities); 

로는 다음이 예상되는 작품.

또한이 라인

나는이 사람을 도울 수 있기를 바랍니다
 OnPropertyChanged("HighCountView"); // or this? 

을 제거 할 수 있습니다!