listView与gridView使用类似,这里讲解gridView的一些数据绑定(x:Bind)基础知识。

顺便学习下如何使用属性通知。(后台中的数据变化会直接显示在UI上,实现动态变化,默认是没有属性通知的)

首先需要声明一个类,添加一些属性。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace XBind.Models
{
public class Worker:INotifyPropertyChanged//继承属性通知接口
{
//Demo中,只实现Years的属性通知
private string name;
public string Name
{
get { return name; }
set {
name = value;
NotifyPropertyChanged("Name");
} } private string age;
public string Age
{
get { return age; }
set
{
age = value;
NotifyPropertyChanged("Age");
}
} private string years;
public string Work_Years
{
get => years;
set
{
years = value;
NotifyPropertyChanged("Work_Years");
}
} //实现属性通知
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
}
}

Xaml代码

<Page
x:Class="XBind.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XBind"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="using:XBind.Models"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
<StackPanel Orientation="Vertical">
<TextBlock Text="Add Worker" FontSize="30" FontWeight="Bold"/>
<TextBox x:Name="name_textBox" PlaceholderText="Name"/>
<TextBox x:Name="age_textBox" PlaceholderText="Age" Margin="0,5"/>
<TextBox x:Name="years_textBox" PlaceholderText="Years"/>
<Button x:Name="add_bt" Content="Add" Tapped="add_bt_Tapped" Margin="0,10,0,0"/>
</StackPanel>
<StackPanel Orientation="Vertical" Margin="0,20,0,0">
<TextBlock Text="Search by name,and change working years" FontSize="30" FontWeight="Bold"/>
<TextBox x:Name="search_textBox" PlaceholderText="Enter name" Margin="0,0,0,5"/>
<TextBox x:Name="newYears_textBox" PlaceholderText="Enter new working years"/>
<Button x:Name="change_bt" Content="OK" Tapped="change_bt_Tapped" Margin="0,10,0,0"/>
</StackPanel>
</StackPanel>
<GridView x:Name="gird_view" Grid.Column="1" ItemsSource="{x:Bind workers}">
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="Margin" Value="10"/>
</Style>
</GridView.ItemContainerStyle>
<GridView.ItemTemplate>
<DataTemplate x:DataType="models:Worker">
<StackPanel Orientation="Vertical" Width="100" BorderBrush="SkyBlue" BorderThickness="1">
<TextBlock Text="{x:Bind Name}"/>
<TextBlock Text="{x:Bind Age}"/>
<TextBlock Text="{x:Bind Work_Years,Mode=OneWay}"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</Grid>
</Page>

这里注意的是,因为只实现了Years的属性通知更改, Text="{x:Bind Years,Mode=OneWay}",Mode默认或OneTime都不会更改。

后台代码

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using XBind.Models; // https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x804 上介绍了“空白页”项模板 namespace XBind
{
/// <summary>
/// 可用于自身或导航至 Frame 内部的空白页。
/// </summary>
public sealed partial class MainPage : Page
{
private ObservableCollection<Worker> workers;//之所以使用ObservableCollection而不是List,因为前者支持UI动态变化
public MainPage()
{
this.InitializeComponent();
workers = new ObservableCollection<Worker>();
} private void add_bt_Tapped(object sender, TappedRoutedEventArgs e)
{
var work = new Worker
{
Name = name_textBox.Text,
Age = age_textBox.Text,
Work_Years = years_textBox.Text
};
workers.Add(work);
} private async void change_bt_Tapped(object sender, TappedRoutedEventArgs e)
{
if (workers.Count > 0 )
{
foreach (var item in workers)
{
if (item.Name.ToLower() == search_textBox.Text.ToLower())
{
item.Work_Years = newYears_textBox.Text;
}
else
{
var message = new MessageDialog("Check no such person!");
await message.ShowAsync();
}
}
}
}
}
}

Demo源码:https://github.com/singhwong/uwp-xBind-demo.git

uwp,c#,listView与gridView列表控件进阶的更多相关文章

  1. UWP开发必备:常用数据列表控件汇总比较

    今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...

  2. WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Dat ...

  3. 【转】WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: DataGrid自定义样式: ListView自定义样式: 二.Dat ...

  4. 【Android】12.0 UI开发(三)——列表控件ListView的简单实现2

    1.0 由于书上内容,已经和实际编程的兼容性已经不太友好,重写了项目,用于进一步学习列表控件ListView. 2.0 新建项目ListViewTest,其中文件目录如下: 3.0 ActivityC ...

  5. .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)

    说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等. 它们的共同 ...

  6. Windows Phone 8.1 列表控件(2):分组数据

    说到 List 控件,Windows Phone 8.1 上推荐使用的是 ListView 和 GridView. 而这两个控件实在太多东西可讲了,于是分成三篇来讲: (1)基本 (2)分组数据 (3 ...

  7. WPF: 实现带全选复选框的列表控件

    本文将说明如何创建一个带全选复选框的列表控件.其效果如下图:     这个控件是由一个复选框(CheckBox)与一个 ListView 组合而成.它的操作逻辑: 当选中“全选”时,列表中所有的项目都 ...

  8. Github上star数超1000的Android列表控件

    Android开发中,列表估计是最最常使用到的控件之一了.列表相关的交互如下拉刷新,上拉更多,滑动菜单,拖动排序,滑动菜单,sticky header分组,FAB等等都是十分常见的体验.Github中 ...

  9. 【Android】15.0 UI开发(六)——列表控件RecyclerView的网格布局排列实现

    1.0 列表控件RecyclerView的网格布局排列实现,关键词GridLayoutManager. LinearLayoutManager 实现顺序布局 GridLayoutManager 实现网 ...

随机推荐

  1. 从零开始实现SSD目标检测(pytorch)(一)

    目录 从零开始实现SSD目标检测(pytorch) 第一章 相关概念概述 1.1 检测框表示 1.2 交并比 第二章 基础网络 2.1 基础网络 2.2 附加网络 第三章 先验框设计 3.1 引言 3 ...

  2. P3688 [ZJOI2017] 树状数组 【二维线段树】

    题目描述:这里有一个写挂的树状数组: 有两种共\(m\)个操作: 输入\(l,r\),在\([l,r]\)中随机选择一个整数\(x\)执行\(\text{Add}(x)\) 输入\(l,r\),询问执 ...

  3. 开源是个巨大的坑,谁来帮帮我 - smartmontools 虐我记

    最近在试用smartmontools,感觉还行,于是乎想找来源码改改试试,这下可好,掉坑里了.呜呜呜... smartmontools的源码在这里可以看到:https://www.smartmonto ...

  4. P1338 末日的传说,P1372 P1414 又是毕业季——贪心

    一个1到n序列,合理排序逆序对数要求是m,而且字典序要求最小: 这个题,因为数字只能用一次,所以我们可以知道什么位置放什么数逆序对的个数会增加或减少多少: 先求出最多能产生的数量,每次先输出最小的数, ...

  5. Java核心复习——synchronized

    一.概念 利用锁机制实现线程同步,synchronized关键字的底层交由了JVM通过C++来实现 Java中的锁有两大特性: 互斥性 同一时间,只允许一个线程持有某个对象锁. 可见性 锁释放前,线程 ...

  6. idea出现Error configuring application listener of class org.springframework.web.context.ContextLoader

    在IDEA中写spring mvc时出现Error configuring application listener of class org.springframework.web.context. ...

  7. Java 实例 - instanceof 关键字用法

    Java 实例 - instanceof 关键字用法 instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符. instanceof 是 Java 的保留关键 ...

  8. Alpha项目冲刺! Day1-领航

    各个成员在 Alpha 阶段认领的任务 成员 任务 任务时长 林恩 项目进度签到代码审核与签入撰写博客协调组内合作 50 寇永明 美工和部分后台编写 30 杨长元 安卓端搭建 45 胡彤 服务器框架搭 ...

  9. 黑马vue---33、vue-resource 实现 get, post, jsonp请求

    黑马vue---33.vue-resource 实现 get, post, jsonp请求 一.总结 一句话总结: vue-resource使用非常非常非常简单:this.$http.get('htt ...

  10. Webservice初体验:axis调用wsdl和document解析

    Neo君遇到了需要调用webservice接口的情况,然而作为一只小白对这方面了解困乏,经过摸索,完成了一个小的Demo,记录下. 一:背景 同事给了我一个webservice地址,打开后后缀是&qu ...