Update/Refresh 没有从顶部开始的 ListView 或 ListView Item
Update/Refresh ListView or ListView Item without starting from the top
有没有办法 update/refresh 我的 ListView 或 ListView 项目?目前 update/refresh 我的 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 中向下滚动并 select 一个项目,我将再次跳到我的 ListView 的顶部。但我需要留在我离开的同一个地方。有解决办法吗?
正确的做法实际上是在您的模型 class 中使用 INotifyPropertyChanged
并将可观察集合用作您的 ListView ItemsSource。
首先,用 INotifyPropertyChanged
继承你的 class 并实现它的 属性 像这样:
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
}
有没有办法 update/refresh 我的 ListView 或 ListView 项目?目前 update/refresh 我的 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 中向下滚动并 select 一个项目,我将再次跳到我的 ListView 的顶部。但我需要留在我离开的同一个地方。有解决办法吗?
正确的做法实际上是在您的模型 class 中使用 INotifyPropertyChanged
并将可观察集合用作您的 ListView ItemsSource。
首先,用
INotifyPropertyChanged
继承你的 class 并实现它的 属性 像这样: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 }