C#博客随笔之六:数据绑定

这一篇随笔记录的是在完成程序中遇到的一些情况

首先要讲的是MVVM

所谓MVVM就是Model,View,ViewModel

下面是MVVM的优点(引用自百度百科):

MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点
1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

这一篇主要讲的是数据绑定:

首先摆上程序界面

简单的写了一个美剧抓取的界面,并将数据动态显示在页面中

首先我们创建一个windows store 应用,模板我们就选择Grid App

然后我们看一下,Grid 就是一个这种样式的模板

首先我们先看一下xaml中的代码

 <GridView.ItemTemplate>
                <DataTemplate>
                    <Grid HorizontalAlignment="Left" Width="250" Height="250">
                        <Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}">
                            <Image Source="{Binding ImagePath}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
                        </Border>
                        <StackPanel VerticalAlignment="Bottom" Background="{ThemeResource ListViewItemOverlayBackgroundThemeBrush}">
                            <TextBlock Text="{Binding Title}" Foreground="{ThemeResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextBlockStyle}" Height="60" Margin="15,0,15,0"/>
                            <TextBlock Text="{Binding Subtitle}" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
                        </StackPanel>
                    </Grid>
                </DataTemplate>
            </GridView.ItemTemplate>

  我们可以看到,这里使用了数据绑定, 就是{Binding Title} 类似与这种的都是使用了数据绑定

因为我们现在就需要这种方式来呈现我们的界面,所以我们部队界面进行修改,我们来修改数据源

查看代码  我们可以发现

 private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {

            // TODO: Create an appropriate data model for your problem domain to replace the sample data
            var sampleDataGroups = await SampleDataSource.GetGroupsAsync();
            this.DefaultViewModel["Groups"] = sampleDataGroups ;
        }

  

这段代码,可以看到sampledatagroups 这个就是数据源,然后我们查看SampleDataScore的定义

在GetSampleDataAsync 方法中我们可以看到这句,其实他是从一个json文件中读取对象信息

Uri dataUri = new Uri("ms-appx:///DataModel/SampleData.json");

所以我们可以直接打开这个文件

 "UniqueId": "Group-1",
    "Title": "Group Title: 1",
    "Subtitle": "Group subtitle: 1",
    "ImagePath": "Assets/DarkGray.png",
    "Description" : "Group Description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus tempor scelerisque lorem in vehicula. Aliquam tincidunt, lacus ut sagittis tristique, turpis massa volutpat augue, eu rutrum ligula ante a ante",
    "Items":
    [
      {
        "UniqueId": "Group-1-Item-1",
        "Title": "Item Title: 1",
        "Subtitle": "Item Subtitle: 1",
        "ImagePath": "Assets/LightGray.png",
        "Description" : "Item Description: Pellentesque porta, mauris quis interdum vehicula, urna sapien ultrices velit, nec venenatis dui odio in augue. Cras posuere, enim a cursus convallis, neque turpis malesuada erat, ut adipiscing neque tortor ac erat.",
        "Content" : "text"
      },
      {
        "UniqueId": "Group-1-Item-2",
        "Title": "Item Title: 2",
        "Subtitle": "Item Subtitle: 2",
        "ImagePath": "Assets/DarkGray.png",
        "Description" : "Item Description: Pellentesque porta, mauris quis interdum vehicula, urna sapien ultrices velit, nec venenatis dui odio in augue. Cras posuere, enim a cursus convallis, neque turpis malesuada erat, ut adipiscing neque tortor ac erat.",
        "Content" : "text"
      },

  

大约就是定义了这个样子, 通过阅读代码,我们可以知道

这个类大约是这个样子的

public class ItemDetail
    {
        public string UniqueId { get; set; }
        public string Subtitle { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public BitmapImage ImagePath { get; set; }
    }

    public class DateModel
    {
        public string Title { get; set; }
        public List<ItemDetail> Items { get; set; }
    }

  然后,我们通过上一个随笔中写的方式,从网站上抓取相应的数据,存到一个list当中,然后对将list绑定到相应的source 就可以了,具体的内容,下一个随笔来讲

活学活用   have fun

么么么么哒

时间: 2024-09-30 22:09:19

C#博客随笔之六:数据绑定的相关文章

第一篇博客随笔

工作近一年,每天都有一个成为技术大牛的梦,可总是被各种琐事放下,来京一年多,计划三五年,已过近三分之一,可还是没有什么实质性的突破,仍然混在菜鸟的行列. 期望在预期完成前,可以达到自己的预期.距2018年结束,还剩下两个月时间,先给自己定下一个小目标. 1.每周至少保证1~2篇的博客随笔,不管好赖,有个记录,也方便自己日后在看. 2.坚持每天的英语.日语的学习,不要求过多,每天至少保证30分钟的外文阅读即可. 3.每周至少搞定一天文章.http://java-performance.info/

博客随笔《文章目录》大纲

/**博客随笔<文章目录>大纲***/ /---------更新时间:2018-9-30 ------------/ /* *大纲分为三大部分,包括:前端开发技术.服务器开发技术.数据库开发技术 */ /-------------------------------------------------- 前端技术 ------------------------------------------------------------/ 一.html/css/html5/css3 html+cs

第一次博客随笔 吴为橦

写博客随笔的意义,其实就和记录美好生活差不多,想到什么写什么.关于Python这是上了大学以来学到的第四种计算机语言了.对于一个还没将之前的东西学透的人来说可以说是相当难学了. 废话不说,首先要知道Python才能够对于之后的学习更有帮助.Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发.它的发展历程可以说是很短了,在20世纪90年代的时候才创建出来模板.

博客园美化博客随笔目录

博客园美化博客随笔目录 基于孤傲苍狼在2014-5-11写的目录代码基础上进行改进 一.js代码 <!--目录--> <script type="text/javascript"> var BlogDirectory = { /* 获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top) */ getElementPosition:function (ele) { var topPosition = 0; var leftPosition

C#博客随笔之七:反射初体验

这篇博客主要要讲的是反射在C#编程中的一些使用: 主要目的是为了让程序能动态识别插件并加载到主程序当中. 这个功能是一个实用的功能. 首先,我们需要定义一个接口 public interface IPlug { /// <summary> /// 获得版本号 /// </summary> /// <returns>返回版本</returns> string GetVersion(); /// <summary> /// 获得插件作者 /// &l

C#博客随笔之五:文件格式化输出

这篇博客主要是用到的知识点是将文件中的内容进行格式化输出 直接上图 左边是初始文件,右边是结果. 然后上程序界面 然后接下来上代码 private void button1_Click(object sender, EventArgs e) { //读取文件的对话框 OpenFileDialog fileDialog = new OpenFileDialog(); if (fileDialog.ShowDialog() == DialogResult.OK) { //如果点击确定的话,将文件完整

C#博客随笔之十:Problem Statement+System Glossary+System Supplementary Specification FOR每美欲下

似乎这是要求的最后一篇博客了,然而依然要好好写呢! MeiMeiYuXia Problem Statement Version 1.0 Revision History Date Issue Description Author 18/May/2015 1.0 Initial creation. Extracted the Problem Statement from the Vision document for purposes of scoping. Melody.Wang 24/May/

优秀博客随笔收录(持续更新...)

1 IT工具软件类 (1)最实用的IT类网站及工具大集合(PS:本文讲述了软件开发过程中大部分常用的工具及网站) (2)你必须收藏的Github技巧(PS:想学习在GitHub上搭建个人博客的同学可以看看) (3)Vmware Server 2.0.2 安装图文解说(比较详细)(PS:初步学习如何安装Linux虚拟机的同学可以看看) 待续...

新博客随笔

今天刚开通博客,先说说开通博客的原因.因为一个月前辞去毕业后的第一份工作,有很多时间去思考自己未来的职业规划,所以想通过博客记录一下.另外一个原因是几天前到ucloud面试,深受打击,意识到自己有太多的不足.为了在未来能够让自己变得更优秀,开始去写技术博客也是我要做的第一步. 对大学至今五年时间里的自己先做一个总结.普通得不能再普通的本科院校,自动化专业,四年大学生涯留下更多应该是遗憾.第一,毕业以后和在一起四年的女朋友分手,这让我有一段时间浑浑噩噩,脑子里总想着我要怎么努力工作证明自己,也只是