C# 在另一个IList数据模型中存储数组或IList
我似乎找不到为我的MVVM Xamarin表单应用程序构建和使用数据的最佳实践或最佳机制。这可能是对如何解决问题的简单误解,但我不确定 我曾经尝试过使用IEnumerable、IList和一个用于多维数据(绑定?)的简单数组,但我对MVVM非常陌生,因此,我可能是错误的 这是针对Xamarin.Forms Android应用程序的,因此使用MySQL类型的数据绑定不起作用(因为您无法存储在数据库中)。所以使用这些数据类是正确的方法,但我不知道如何构造关系数据。 每条传送带可以有许多视频、按钮和其他内容C# 在另一个IList数据模型中存储数组或IList,c#,mvvm,xamarin.forms,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
}
});
}
//试图使用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应用程序并将数据库复制到所需位置来应用此任务
顺便说一下:SQLiteExtensions使用IList或List。。。如果性能是一个问题,您可以稍后(如果需要)切换到SQLiteExtensions的缓存分支。我认为您的基本问题是“如何设计我的数据模型?”这是一个相当广泛的问题,很难回答。设计中是否有某些特定部分会给您带来问题?事实上,这是一个Xamarin应用程序或MVVM与您的模型设计无关。我可以尝试在上面的问题中澄清,但我不确定如何描述它。我知道如何创建数据模型,但在不使用SQL“应用程序附带的关系数据”时,我不知道如何以有意义的方式引用和/或消费和/或构造数据-为什么不在应用程序中提供预填充的SQLite db?我很乐意这样做,尽管大多数关于创建SQLite db的教程和/或讨论没有显示如何使用数据初始化它们,就像ASP.Net/MVC教程/文档那样。我似乎还记得有人说过,由于用户可以轻松地直接读取数据库,所以不应该这样做。有许多第三方SQLite工具可用于创建数据库并手动或通过导入填充数据。谷歌“sqlite管理器”也在名单上,现在试图不提及EF核心,即使它可能是一个很好的解决方案。这应该是一个快速的方法