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

时间:2019-04-11 16:11:37

标签: c# mvvm xamarin.forms

我似乎找不到用于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
               }
        });

    }

我也有这些的数据模型 注意:我尝试过的其他路线的BeltContent注释。 添加为注释以合并代码

// 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; }

}

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

1 个答案:

答案 0 :(得分:1)

阅读您的帖子评论,我正在盲目尝试...

由于我是Xamarin的新手(来自Windows Forms和Server),这对我来说也是一个问题。如何储存?大的ORM无效...?!

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

  • 创建Xamarin项目
  • 创建一个类库(在.Net Standard中更可取)
  • 打开类库的Nuget软件包管理器
  • 获取“ SQLite-Net扩展”程序包
  • 包名称:SQLiteNetExtensions
  • 我认为您不需要用于SQLiteExtensions的MVVM软件包
  • this blog上有一个很好的教程,介绍如何初始化数据库模型以及如何读取/写入数据
  • 在每个与平台无关的项目中,初始数据库都必须复制为文件包含>
  • 使用PCLStorage或其他工具,您可以通过将初始数据库作为资源导入到xamarin应用程序并将数据库复制到所需位置来应用此任务。

我总是喜欢使用in this gist

这样的PCLStorage解决方案

xamarin的一个窍门是:尝试查找.net标准库,您应该(在很多情况下)可以在大多数xamarin平台上使用它。

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

第三个是:基本应用程序和所有与平台相关的应用程序中都需要安装许多nuget库。不要忘记在SQLiteExtensions之类的情况下-它会安装平台相关的库。

(伙计们,不要为此而杀了我-我只是在试图帮助;-))

顺便说一句:SQLiteExtensions使用IList或List ...如果性能有问题,您可以稍后再切换到SQLiteExtensions的缓存派生分支(如果需要)