C# 在另一个IList数据模型中存储数组或IList

C# 在另一个IList数据模型中存储数组或IList,c#,mvvm,xamarin.forms,C#,Mvvm,Xamarin.forms,我似乎找不到为我的MVVM Xamarin表单应用程序构建和使用数据的最佳实践或最佳机制。这可能是对如何解决问题的简单误解,但我不确定 我曾经尝试过使用IEnumerable、IList和一个用于多维数据(绑定?)的简单数组,但我对MVVM非常陌生,因此,我可能是错误的 这是针对Xamarin.Forms Android应用程序的,因此使用MySQL类型的数据绑定不起作用(因为您无法存储在数据库中)。所以使用这些数据类是正确的方法,但我不知道如何构造关系数据。 每条传送带可以有许多视频、按钮和其

我似乎找不到为我的MVVM Xamarin表单应用程序构建和使用数据的最佳实践或最佳机制。这可能是对如何解决问题的简单误解,但我不确定

我曾经尝试过使用IEnumerable、IList和一个用于多维数据(绑定?)的简单数组,但我对MVVM非常陌生,因此,我可能是错误的

这是针对Xamarin.Forms Android应用程序的,因此使用MySQL类型的数据绑定不起作用(因为您无法存储在数据库中)。所以使用这些数据类是正确的方法,但我不知道如何构造关系数据。 每条传送带可以有许多视频、按钮和其他内容


关于这一点,我浏览了Xamarin的示例,但没有一个涉及应用程序附带的关系数据

// Trying to use an aray
public IList<BeltContent> BeltContents { get; private set; }
public BeltData()
    {
        // Bringing it all together
        BeltContents = new List<BeltContent>();

        BeltContents.Add(new BeltContent
        {
            BeltName = "White",
            VideoContent = {
                  "https://url-to-my-video01", 
                  "https://url-to-my-video01" }
        });

    }


//Trying to use an IList to initialize inside

public IList<BeltContent> BeltContents { get; private set; }
public Ilist<VideoContent> VideoContents {get; private set; }
public BeltData()
    {
        // Bringing it all together
        BeltContents = new List<BeltContent>();
        VideoContents = new List<VideoContent>();

        BeltContents.Add(new BeltContent
        {
            BeltName = "White",
            VideoContent = VideoContents.Add(new VideoContent
               {
                   VideoName = "SomeName",
                   VideoUri = "Https://some-url-to-video"
               },
               {
                  //etc
               }
        });

    }
//试图使用aray
公共IList贝尔特内容{get;private set;}
公共带数据()
{
//把这一切结合起来
BeltContents=新列表();
安全带内容。添加(新的安全带内容
{
BeltName=“白色”,
视频内容={
"https://url-to-my-video01", 
"https://url-to-my-video01" }
});
}
//尝试使用IList在内部初始化
公共IList贝尔特内容{get;private set;}
公共Ilist视频内容{get;private set;}
公共带数据()
{
//把这一切结合起来
BeltContents=新列表();
VideoContents=新列表();
安全带内容。添加(新的安全带内容
{
BeltName=“白色”,
VideoContent=VideoContents.Add(新的VideoContent)
{
VideoName=“SomeName”,
VideoUri=“Https://some-url-to-video"
},
{
//等
}
});
}
我也有这些方面的数据模型 注:我尝试过的其他路线的安全带内容的注释。 添加为注释以合并代码

// The Data Model for videos (note they all follow this pattern)
public class VideoContent
{
    public string VideoName { get; set; }

    public string VideoUri { get; set; }
}


// Full content for the data model
public class BeltContent
{

    public string BeltName { get; set; }

    public string BeltDescription { get; set; }

    // public IEnumerable<VideoContent> VideoContent {get; set;}
    // public string[] VideoContent {get; set; }
    // public IList<VideoContent> VideoContent {get; set;} 

    public VideoContent VideoContent {get; set; }

    public ButtonResourceUri ButtonResourceUri { get; set; }

    public WrittenContent WrittenContent { get; set; }

}
//视频的数据模型(注意它们都遵循此模式)
公共类视频内容
{
公共字符串VideoName{get;set;}
公共字符串VideoUri{get;set;}
}
//数据模型的完整内容
公共级安全带内容
{
公共字符串BeltName{get;set;}
公共字符串带描述{get;set;}
//公共IEnumerable视频内容{get;set;}
//公共字符串[]视频内容{get;set;}
//公共IList视频内容{get;set;}
公共视频内容视频内容{get;set;}
公共按钮资源URI按钮资源URI{get;set;}
公共writenContent writenContent{get;set;}
}

我希望我可以使用一个多维数组排序或IList来存储嵌套数据。

阅读你文章的评论,我正在尝试一个盲镜头

由于我刚接触Xamarin(来自Windows窗体和服务器),这对我来说也是一个问题。如何存储?大型ORM无法工作

这相对容易-你在Xamarin上有它自己的规则。有很多与Xamarin相关的问题的解决方案,我将尝试展示我的标准解决方案

  • 创建Xamarin项目
  • 创建类库(最好是在.Net标准中)
  • 打开类库的Nuget包管理器
  • 获取“SQLite Net Extensions”包
  • 包名称:SQLiteNetExtensions
  • 我认为SQLiteExtensions不需要一些MVVM包
  • 关于如何初始化数据库模型以及如何读/写数据,有一个非常好的教程
  • 初始数据库必须作为文件include>复制到每个独立于平台的项目中
  • 使用PCLStorage或其他工具,您可以通过将初始数据库作为ressource导入xamarin应用程序并将数据库复制到所需位置来应用此任务
我总是以PCLStorage解决方案结束,比如

xamarin的一个技巧是:尝试查找.net标准库,在大多数情况下,您应该能够在大多数xamarin平台上使用它

第二个是:注意在nuget导入中打开的自述文件!!!这些文件非常重要。我过去常常点击它们,几乎忘记了所有的初始化例程。花了我几个小时

第三点是:有很多nuget库需要安装在基础应用程序和所有依赖于平台的应用程序中。不要忘记,在类似SQLiteExtensions的情况下,它将安装依赖于平台的库

(伙计们,别为此杀了我-我只是想帮忙;-))


顺便说一下:SQLiteExtensions使用IList或List。。。如果性能是一个问题,您可以稍后(如果需要)切换到SQLiteExtensions的缓存分支。

我认为您的基本问题是“如何设计我的数据模型?”这是一个相当广泛的问题,很难回答。设计中是否有某些特定部分会给您带来问题?事实上,这是一个Xamarin应用程序或MVVM与您的模型设计无关。我可以尝试在上面的问题中澄清,但我不确定如何描述它。我知道如何创建数据模型,但在不使用SQL“应用程序附带的关系数据”时,我不知道如何以有意义的方式引用和/或消费和/或构造数据-为什么不在应用程序中提供预填充的SQLite db?我很乐意这样做,尽管大多数关于创建SQLite db的教程和/或讨论没有显示如何使用数据初始化它们,就像ASP.Net/MVC教程/文档那样。我似乎还记得有人说过,由于用户可以轻松地直接读取数据库,所以不应该这样做。有许多第三方SQLite工具可用于创建数据库并手动或通过导入填充数据。谷歌“sqlite管理器”也在名单上,现在试图不提及EF核心,即使它可能是一个很好的解决方案。这应该是一个快速的方法