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 实现网 ...
随机推荐
- BZOJ 1576 树剖+LCT
题意:给定一张图,保证 $1$ 号点到其他所有点的最短路径是唯一的,求:对于点 $i$,不经过 $1$ 到 $i$ 最短路径上最后一条边的最短路. 题解:可以先建出最短路树,然后枚举每一条非树边. 对 ...
- linux 安装Apache服务器
这篇文章先别看,,有些地方我不是很明白,写错了一些地方,正在咨询会linux的大神 安装好Apache就可以用Http访问或者下载电脑的文件了 我还是用 连接我的linux电脑 咱把Apache安装到 ...
- bzoj 3398
f[i]表示最后一个是公牛的方案数,=sigma(f[j])(j<i-k) 然后前缀和优化即可. #include <cstdio> #include <cstdlib> ...
- BZOJ 2038: [2009国家集训队]小Z的袜子
二次联通门 : BZOJ 2038: [2009国家集训队]小Z的袜子 /* BZOJ 2038: [2009国家集训队]小Z的袜子 莫队经典题 但是我并不认为此题适合入门.. Answer = ∑ ...
- Java基础系列 - try...catch...finally
package com.test6; import java.io.FileReader; import java.io.IOException; /** * try...catch...finall ...
- js小脚本解析后台数据
java代码 List<CodeTableBean> clfsList = StandardCodeTable.getCodeTable("clfs", "& ...
- 高效使用Linux快捷键
命令行操作快捷键 Ctrl+a跳到本行的行首,Ctrl+e则跳到页尾. Ctrl+u删除当前光标前面的所有文字, ctrl+k-删除当前光标后面的所有文字 Ctrl+w删除光标前的单词 Backsap ...
- Arts打卡第8周
Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...
- python -- 安装 django
django-admin startproject 创建的文件名python3/python manage.py startapp 子项目名称python3/python manage.py runs ...
- C# 怎么生成DLL文件(转)
有两种方法: 但是一般这个使用 打开VS2008,依次点击:菜单->文件->新建项目->项目类型visual C#(这里假设为该项目所取的名字是DllBuild)-& ...