uwp,c#,listView与gridView列表控件进阶
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列表控件进阶的更多相关文章
- UWP开发必备:常用数据列表控件汇总比较
今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...
- WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Dat ...
- 【转】WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: DataGrid自定义样式: ListView自定义样式: 二.Dat ...
- 【Android】12.0 UI开发(三)——列表控件ListView的简单实现2
1.0 由于书上内容,已经和实际编程的兼容性已经不太友好,重写了项目,用于进一步学习列表控件ListView. 2.0 新建项目ListViewTest,其中文件目录如下: 3.0 ActivityC ...
- .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)
说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等. 它们的共同 ...
- Windows Phone 8.1 列表控件(2):分组数据
说到 List 控件,Windows Phone 8.1 上推荐使用的是 ListView 和 GridView. 而这两个控件实在太多东西可讲了,于是分成三篇来讲: (1)基本 (2)分组数据 (3 ...
- WPF: 实现带全选复选框的列表控件
本文将说明如何创建一个带全选复选框的列表控件.其效果如下图: 这个控件是由一个复选框(CheckBox)与一个 ListView 组合而成.它的操作逻辑: 当选中“全选”时,列表中所有的项目都 ...
- Github上star数超1000的Android列表控件
Android开发中,列表估计是最最常使用到的控件之一了.列表相关的交互如下拉刷新,上拉更多,滑动菜单,拖动排序,滑动菜单,sticky header分组,FAB等等都是十分常见的体验.Github中 ...
- 【Android】15.0 UI开发(六)——列表控件RecyclerView的网格布局排列实现
1.0 列表控件RecyclerView的网格布局排列实现,关键词GridLayoutManager. LinearLayoutManager 实现顺序布局 GridLayoutManager 实现网 ...
随机推荐
- QShareMemory
Qt提供了一种安全的共享内存的实现QSharedMemory,以便在多线程和多进程编程中安全的使用.比如说QQ的聊天的客户端,这里有个个性头象,当点击QQ音乐播放器的时候,启动QQ音乐播放器(启动一Q ...
- 数据结构实验之图论七:驴友计划【迪杰斯特拉算法】(SDUT 3363)
分析:可以求简单的任意两点间最短距离的稍微变形,一个板子题. #include <iostream> #include <bits/stdc++.h> using names ...
- [WEB安全]Dirsearch工具命令
下载项目,并打开 ┌─[root@kali]─[/kali] └──╼ #git clone https://github.com/maurosoria/dirsearch ┌─[root@kali] ...
- Go by Example-常量
Go by Example 中文:常量 在上一节中提到了变量,常用的有两种定义的方式使用var或者短变量的形式进行定义,这节我们来说常量. 常量 常量是指程序运行时不可改变的值,常量必须初始化值,定义 ...
- jQuery之编写插件
一.学习插件编写背景 作为一名前端人员,应该注重前端复用性及组件化,更应该考虑前端的性能优化,做到代码简洁有序,不冗余.特别是在大型团队中,如果一个团队中存在多个功能相似的组件,举个栗子,拿分页组件举 ...
- linux和window下生成任意大小的文件
在Windows环境下的实现方法 使用fsutil命令,在windows xp和win 7下应该都自带了这个命令.命令的格式是 fsutil file createnew 新文件名 文件大小.例如 ...
- http digest鉴权
“摘要”式认证( Digest authentication)是一个简单的认证机制,最初是为HTTP协议开发的,因而也常叫做HTTP摘要,在RFC2671中描述.其身份验证机制很简单,它采用杂凑式(h ...
- 数据库连接池Flask-SQLAlchemy中多线程安全的问题
使用flask-sqlalchemy写代码码到一半,突然想到,Session是否是线程安全的?于是上官方文档,答案是否! 那问题来了,怎么破?因为它会牵涉到多线程情况下,调用rollback导致的不可 ...
- 解决 MYSQL CPU 占用 100% 的经验总结
朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL 服务进程 (mysqld-nt.exe) CPU 占用率总为 100% 高居不下.此主机有10个左右的 ...
- 009-Linux nohup
一.基础概述 1./dev/null 可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然 ...