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.";
}
Entity 클래스의 코드를 추가하십시오. – Ekk
이제 Entity 클래스가 추가되었습니다. –
이것을 시도해 볼 수 있습니까? var savedhighcount = HighCountView; HighCountView = null; OnPropertyChanged ("HighCountView"); HighCountView = savedhighcount; OnPropertyChanged ("HighCountView"); ..... 당신의 CurrentChanged에없는 하단의 생성자에서만 이것을 수행하십시오. –