开发者社区> 问答> 正文

分组/嵌套列表视图

我正在开发一个库存管理器Xamarin IOS应用程序。我试图创建一个页面,用户可以在其中添加库存,包括一组系列商品到商店库存。我需要的设计是一个具有多个条目的嵌套列表视图,如果第一个列表视图中的Productid属于一个电话项,它将有一个内部List视图,其中包含序列化Number值的条目(Stock.Quantity的大小)。如果产品是附件,它将没有序列号。我尝试过分组和嵌套ListViews,但是没有效果。

股票类别:

public class Stock
{

    [Key]
    public int ProductId { get; set; }
    [Required]
    public int StoreId { get; set; }
    [Required]
    public int Quantity { get; set; }

    [JsonIgnore]
    public virtual Product Product { get; set; }
    [JsonIgnore]
    public virtual Store Store { get; set; }
    public virtual ICollection<SerialNumber> SerialNumbers { get; set; }

}```  

系列编号:

public class SerialNumber { [ForeignKey("ProductId")] public int ProductId { get; set; } [ForeignKey("StoreId")] public int StoreId { get; set; } [Key] public string SerialNumberValue { get; set; } [JsonIgnore] public virtual Stock Stock { get; set; }

}

ViewModel类:

using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Windows.Input; using InventoryManager.Models; using Xamarin.Forms;

namespace InventoryManager.ViewModels { public class AddStocksViewModel : BaseViewModel { public AddStocksViewModel() {

    stocks = new ObservableCollection<Stock>();
    stocks.Add(new Stock() { StoreId = App.currentStore.StoreId, SerialNumbers = new ObservableCollection<SerialNumber>() });
    serialNumbers = new ObservableCollection<SerialNumber>();
    serialNumbers.Add(new SerialNumber());

}
public IList<Stock> stocks { get; set;  }
public IList<SerialNumber> serialNumbers { get; set; }
public IList<Stock> Stocks
{
    get { return stocks; }
    set { stocks = value; }
}


public IList<SerialNumber> SerialNumbers {
    get { return serialNumbers; }
    set { serialNumbers = value; }

}

public int ProductId { get; set; }

public ICommand ProductIdChanged {
    get
    {
        return GetProduct;
    }  
}

public bool IsProductAPhone { get; set; } 
//public Stock  Stock {get;set;}
public Product Product { get; set; } 
public ICommand GetProduct
{
    get
    {
        return new Command(async () =>
        {
            try
            {
                Product = await DataStore.GetProductAsync(ProductId);
            }
            catch
            {


            }
            finally
            {
                if (Product != null)
                    IsProductAPhone = Product.ProductType == ProductType.Phone;
            }
        });
    }
}

} }

AddStocksPage代码背后

using System; using System.Collections.Generic; using InventoryManager.ViewModels; using Xamarin.Forms; using InventoryManager.Models; namespace InventoryManager.Views { public partial class AddStocksPage : ContentPage { AddStocksViewModel viewModel;

public AddStocksPage()
{
    InitializeComponent();
    BindingContext = viewModel = new AddStocksViewModel();


}
public void OnProductIdChanged(object sender, TextChangedEventArgs args)
{
    viewModel.GetProduct.Execute(null);
    //viewModel.Product.Id = (args.NewTextValue);
}
public void OnQuantityChanged(object sender, TextChangedEventArgs args)
{
    try
    {
        int quantity = Int32.Parse((sender as Entry).Text);
        if (viewModel.IsProductAPhone)
        {
            for (int i = 0; i < quantity; i++)
                viewModel.SerialNumbers.Add(new SerialNumber());

        }
    }
    catch {

    }
    //viewModel.Product.Id = (args.NewTextValue);
}
public void AddItemClicked (object sender, EventArgs args){
    viewModel.Stocks.Add(new Stock { StoreId = App.currentStore.StoreId });
}

}

}

**AddStocksPage XAML代码:我尝试过两种方法,一种是注释掉**

``` 请告诉我任何建议/建议。任何关于如何实现这一目标的示例代码都将不胜感激。

展开
收起
游客5akardh5cojhg 2019-12-05 13:20:53 359 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载