Обновить / обновить ListView или ListView Item, не начиная сверху - PullRequest
0 голосов
/ 21 ноября 2018

Есть ли способ обновить / обновить мой элемент ListView или ListView?В настоящее время единственный способ обновить / обновить мой ListView - это:

public void NewsList_Selected(Object sender, SelectedItemChangedEventArgs e)
{
    var a = e.SelectedItem as NewsEntry;
    var b = from c in newsEntries
            where (a == c)
            select c;
    foreach(NewsEntry d in b)
    {
        d.Text = d.TextFull;
    }

    // Below is my update/refresh thing
    NewsList.ItemsSource = null;
    NewsList.ItemsSource = newsEntries;
 }

Но это означает, что если я прокручиваю вниз в моем ListView и выбираю элемент, я снова перехожу на вершину моего ListView.Но мне нужно остаться на том же месте, которое я оставил.Есть ли решение?

1 Ответ

0 голосов
/ 21 ноября 2018

Правильный способ сделать это на самом деле - использовать INotifyPropertyChanged в вашем классе Model и использовать наблюдаемую коллекцию в качестве вашего ListView ItemsSource.

  • Во-первых, унаследуйте ваш класс с помощью INotifyPropertyChanged и реализуйте его свойство примерно так:

      public event PropertyChangedEventHandler PropertyChanged;  
    
      private void NotifyPropertyChanged(string propertyName)  
      {  
          if (PropertyChanged != null)  
          {  
             PropertyChanged(this, new PropertyChangedEventArgs(propertyName));  
          }  
       }  
    
  • Затем создайте свойство для вашего ListView:

     private ObservableCollection<DataType> _FooCollection;
     public ObservableCollection<DataType> FooCollection { get{return _FooCollection; } set{_FooCollection = value; OnPropertyChanged(nameof(FooCollection )); }}
    
  • В вашем Xamlназначьте эту коллекцию как привязку списка:

     <ListView .... ItemsSource={Binding FooCollection} ..../>
    
  • Затем, когда вам нужно внести изменения в данные списка, все, что вам нужно сделать, это назначить FooCollection, и он автоматически выполнитотдых для вас.

  • Например:

    public void NewsList_Selected(Object sender, SelectedItemChangedEventArgs e)
    {
         var a = e.SelectedItem as NewsEntry;
         var b = from c in newsEntries
           where (a == c)
           select c;
         foreach(NewsEntry d in b)
        {
          d.Text = d.TextFull;
        }
    
         FooCollection = newsEntries; // This will do the rest for you 
    }
    
...