>我构建了一个 xamarin 项目,该项目在主页的列表视图中填充项目列表。我需要将此页面上的变量传递给 ViewModel 类。我该怎么做???帮助将不胜感激。
我的主页代码如下:
private async void LstItems_OnItemTapped(object o, ItemTappedEventArgs e (
{
var ItemCodeParam = e.Item as Item;
var ItemCode = ItemCodeParam.ItemCode;
await Navigation.PushAsync(new DetailItemPage(ItemCode));
我需要将 ItemCode 传递给我的 ViewModel 类。
}
我的视图模型如下
命名空间 MyFirstDbApp.ViewModels{ 公共类 ItemDetailsViewModel : InotifyPropertyChanged { 私人列表_itemsList;
public List<Item> ItemsList
{
get { return _itemsList; }
set
{
_itemsList = value;
OnPropertyChanged();
}
}
public ItemDetailsViewModel()
{
InitializeDataAsync();
}
private async Task InitializeDataAsync()
{
var result = await ItemServices.GetItemsAsync().ConfigureAwait(false);
ItemsList = result.Where(x => x.ItemCode == "").ToList();
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public ItemDetailsViewModel(string ItemCode)
{
InitializeDataAsync(ItemCode);
}
private async Task InitializeDataAsync(string code)
{
var result = await ItemServices.GetItemsAsync().ConfigureAwait(false);
ItemsList = result.Where(x => x.ItemCode == code).ToList();
}
最简单的选择是 Jason 的答案(将对象作为参数传递到 ItemDetailsViewModel(( 类的构造函数中。您在第一条注释中指定的错误是因为您的代码需要单个无参数构造函数才能正常工作。另外,我认为在Jason指定的代码示例中,您需要在InitializeDataAsync(ItemCode(方法前面添加await关键字。
现在,当您准备好开始实现 MVVM 设计模式时,我建议使用 IoC 容器来存储您的持久对象。TinyIoC非常适合此。如果你要使用MVVM框架,我推荐FreshMVVM(用于Xamarin Forms(,它在nuget包中包含TinyIoC。