我已经构建了一个xamarin项目,该项目填充主页上listview中的项目列表。我需要将此页面上的变量传递给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 { public class 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));
}
}
}
答案 0 :(得分:0)
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();
}
答案 1 :(得分:0)
最简单的选择是Jason的答案(在 ItemDetailsViewModel()类的构造函数中将对象作为参数传递。您在第一条注释中指定的错误是因为您的代码只需要单个参数即可同样,我认为在Jason指定的代码示例中,您需要在 InitializeDataAsync(ItemCode)方法的前面添加 await 关键字。
现在,当您准备开始实施MVVM设计模式时,我建议使用IoC容器存储持久对象。 TinyIoC对此非常有用。如果您要使用MVVM框架,我建议您使用FreshMVVM(用于Xamarin Forms),该文件应在nuget软件包中包含TinyIoC。