![](/img/trans.png)
[英]How to get data from a partial view ViewModel in to the main ViewModel
[英]How to get data to ViewModel list that is acquired from a service and then update the View?
我有一個MVVM問題。
我已成功收集數據,在VM中創建了一個IoC容器並將其綁定到視圖。 我遇到的問題是,除非我導航到某個地方然后返回,否則視圖不會更新其UI。 然后,將填充列表。 請參閱下面的邏輯:
服務:
public ObservableCollection<ClassData> _MyList;
public ObservableCollection<ClassData> MyList
{
get
{
return _MyList;
}
private set
{
_MyList = value;
RaisePropertyChanged("MyList");
}
}
async Task LoadData()
{
var top = await cloudService.GetData().ConfigureAwait(false);
MyList = top.results;
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
接口:
public ObservableCollection<ClassData> MyList { get; }
VM(VM中也確實有一個INotifyPropertyChanged,但是由於它的升高屬性已從服務中更改,因此在此示例中是否需要使用它?):
public ObservableCollection<ClassData> ViewModelList => this.service.MyList;
private readonly IService service;
public MyViewModel (IService service)
{
this.service = service;
}
XAML:
<ListView ItemsSource = {Binding ViewModelList} ... >
嘗試這樣的事情。
XAML:
<ListView ItemsSource="{Binding Service.MyList}" />
視圖模型
private IService _service;
public IService Service
{
get => _service;
set
{
_service = value;
RaisePropertyChanged(nameof(Service));
// So whenever _service is changed, it will generate an event.
// UI will get Service.MyList.
}
}
// No Observable collection.
第二解決方案。
// When _service is changed.
_service.PropertyChanged += Service_PropertyChanged;
// Manually raise event to update list.
private void Service_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "MyList")
OnPropertyChanged(nameof(ViewModelList));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.