C# 在MVVM中更新ViewModel内容
我的XAML页面上有一个列表绑定到我的ViewModel。该列表仅显示条目-没有编辑或更新它们的功能(它们是从服务器api读取的) 在应用程序栏中,我有一个按钮用于重新加载列表(再次向服务器发送请求) 我必须为这个“重新加载功能”做什么 我想到以下几点:C# 在MVVM中更新ViewModel内容,c#,wpf,xaml,windows-phone-8,mvvm,C#,Wpf,Xaml,Windows Phone 8,Mvvm,我的XAML页面上有一个列表绑定到我的ViewModel。该列表仅显示条目-没有编辑或更新它们的功能(它们是从服务器api读取的) 在应用程序栏中,我有一个按钮用于重新加载列表(再次向服务器发送请求) 我必须为这个“重新加载功能”做什么 我想到以下几点: 删除现有的“我的条目”集合 再次激发加载数据 我的问题有什么小片段吗? 由于我以前的收藏而导致的内存问题是什么?如果您认为回调会很轻,那么类似的方法就可以了。如果您认为它可能很重,并且有很多物品要返回,那么这可能不是最有效的方法,但仍然有效
- 删除现有的“我的条目”集合
- 再次激发加载数据
由于我以前的收藏而导致的内存问题是什么?如果您认为回调会很轻,那么类似的方法就可以了。如果您认为它可能很重,并且有很多物品要返回,那么这可能不是最有效的方法,但仍然有效:
public class YourViewModel
{
public ObservableCollection<YourDataType> YourCollection { get; set; }
public ICommand ReloadDataCommand { get; set; }
public YourViewModel()
{
YourCollection = new ObservableCollection<YourDataType>();
ReloadDataCommand = new DelegateCommand(ReloadData);
}
private void ReloadData()
{
//Get your new data;
YourCollection = new ObservableCollection(someService.GetData());
RaisePropertyChange("YourCollection");
//Depending on how many items your bringing in will depend on whether its a good idea to recreate the whole collection like this. If its too big then you may be better off removing/adding these items as needed.
}
}
公共类YourViewModel
{
公共ObservableCollection YourCollection{get;set;}
公共ICommand重新加载数据命令{get;set;}
公共视图模型()
{
YourCollection=新的ObservableCollection();
ReloadDataCommand=新的DelegateCommand(ReloadData);
}
私有void重载数据()
{
//获取你的新数据;
YourCollection=newObservableCollection(someService.GetData());
RaisePropertyChange(“您的收藏”);
//根据你带来的物品数量,这取决于像这样重新创建整个收藏是否是个好主意。如果太大,你最好根据需要删除/添加这些物品。
}
}
在XAML中:
<Button Content="Reload" Command="{Binding ReloadDataCommand}" />
<List ItemsSource="{Binding YourCollection}">
<!-- All your other list stuff -->
</List>
希望这有帮助取决于很多事情。您的列表是可观察的集合吗?列表属性是否在属性更改时通知?您是否正在清除列表并在LoadData中重新加载或替换为新列表?如果是被动列表(即,无法编辑/更新),您可以在后台轮询服务器,并在更新准备就绪时闪烁消息。