相关文章推荐
高大的茄子  ·  条目 - .NET MAUI | ...·  8 月前    · 
怕老婆的米饭  ·  NETSDK1004: ...·  1 年前    · 
踏实的柳树  ·  BETWEEN ...·  1 年前    · 

项目背景:我需要描述一个人的八种不同的行为,每一种行为都是独立的。现在将通过八个CheckBox去分别描述这八种行为,勾选上则存在这种行为,不存在则不勾选,界面图如下:

在这里插入图片描述
界面代码:

<Window x:Class="CheckBoxConverterDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CheckBoxConverterDemo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <local:ValueConverter x:Key="contentColor"/>
    </Window.Resources>
    <Window.DataContext>
        <local:MainWindowViewModel/>
    </Window.DataContext>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid Grid.Row="1">
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <CheckBox Grid.Row="0" Margin="10,0,0,0" Grid.Column="0" IsChecked="{Binding Path=Person.State,Converter={StaticResource contentColor},ConverterParameter=Eatting}" Content="吃饭"></CheckBox>
            <CheckBox Grid.Row="0" Grid.Column="1" IsChecked="{Binding Path=Person.State,Converter={StaticResource contentColor},ConverterParameter=Dringking}" Content="喝茶"></CheckBox>
            <CheckBox Grid.Row="0" Grid.Column="2" IsChecked="{Binding Path=Person.State,Converter={StaticResource contentColor},ConverterParameter=Sleeping}" Content="睡觉"></CheckBox>
            <CheckBox Grid.Row="0" Grid.Column="3" IsChecked="{Binding Path=Person.State,Converter={StaticResource contentColor},ConverterParameter=Playing}" Content="打游戏"></CheckBox>
            <CheckBox Grid.Row="1" Margin="10,0,0,0" Grid.Column="0" IsChecked="{Binding Path=Person.State,Converter={StaticResource contentColor},ConverterParameter=Speaking}" Content="说话"></CheckBox>
            <CheckBox Grid.Row="1" Grid.Column="1" IsChecked="{Binding Path=Person.State,Converter={StaticResource contentColor},ConverterParameter=Smiling}" Content="微笑"></CheckBox>
            <CheckBox Grid.Row="1" Grid.Column="2" IsChecked="{Binding Path=Person.State,Converter={StaticResource contentColor},ConverterParameter=Crying}" Content="哭泣"></CheckBox>
            <CheckBox Grid.Row="1" Grid.Column="3" IsChecked="{Binding Path=Person.State,Converter={StaticResource contentColor},ConverterParameter=Lazing}" Content="发呆"></CheckBox>
        </Grid>
        <Grid Grid.Row="2">
            <Button Width="80" Height="35" Content="确定" Command="{Binding PressOkCommand}"></Button>
        </Grid>
    </Grid>
</Window>

一个人的这八种行为,通过一个枚举类来表示:

using System;
namespace CheckBoxConverterDemo
    [Flags]
    public enum TypeEnum
        None = 0x0,
        Eatting = 0x1,
        Dringking = 0x2,
        Sleeping = 0x4,
        Playing = 0x8,
        Speaking = 0x10,
        Smiling = 0x20,
        Crying = 0x40,
        Lazing = 0x80,
    public class Person
        public TypeEnum State { get; set; }

然后通过转换器去转换不同的状态勾选不同的CheckBox

using System;
using System.Windows.Data;
namespace CheckBoxConverterDemo
    /// <summary>
    /// 自定义事件转换
    /// </summary>
    //[ValueConversion(typeof(TypeEnum), typeof(bool))]
    public class ValueConverter : IValueConverter
        public TypeEnum SetValue { get; set; }
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            if (value == null)
                return false;
            var getData = (TypeEnum)value;
            SetValue = getData;
            switch (parameter.ToString())
                case "Eatting":
                    if ((getData & TypeEnum.Eatting) == TypeEnum.Eatting)
                        return true;
                    break;
                case "Dringking":
                    if ((getData & TypeEnum.Dringking) == TypeEnum.Dringking)
                        return true;
                    break;
                case "Sleeping":
                    if ((getData & TypeEnum.Sleeping) == TypeEnum.Sleeping)
                        return true;
                    break;
                case "Playing":
                    if ((getData & TypeEnum.Playing) == TypeEnum.Playing)
                        return true;
                    break;
                case "Speaking":
                    if ((getData & TypeEnum.Speaking) == TypeEnum.Speaking)
                        return true;
                    break;
                case "Smiling":
                    if ((getData & TypeEnum.Smiling) == TypeEnum.Smiling)
                        return true;
                    break;
                case "Crying":
                    if ((getData & TypeEnum.Crying) == TypeEnum.Crying)
                        return true;
                    break;
                case "Lazing":
                    if ((getData & TypeEnum.Lazing) == TypeEnum.Lazing)
                        return true;
                    break;
            return false;
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            //SetValue = TypeEnum.None;
            if ((bool)value)
                switch (parameter.ToString())
                    case "Eatting":
                        SetValue = SetValue | TypeEnum.Eatting;
                        break;
                    case "Dringking":
                        SetValue = SetValue | TypeEnum.Dringking;
                        break;
                    case "Sleeping":
                        SetValue = SetValue | TypeEnum.Sleeping;
                        break;
                    case "Playing":
                        SetValue = SetValue | TypeEnum.Playing;
                        break;
                    case "Speaking":
                        SetValue = SetValue | TypeEnum.Speaking;
                        break;
                    case "Smiling":
                        SetValue = SetValue | TypeEnum.Smiling;
                        break;
                    case "Crying":
                        SetValue = SetValue | TypeEnum.Crying;
                        break;
                    case "Lazing":
                        SetValue = SetValue | TypeEnum.Lazing;
                        break;
                switch (parameter.ToString())
                    case "Eatting":
                        if ((SetValue & TypeEnum.Eatting) == TypeEnum.Eatting)  //如果存在则移除
                            SetValue = SetValue ^ TypeEnum.Eatting;
                        break;
                    case "Dringking":
                        if ((SetValue & TypeEnum.Dringking) == TypeEnum.Dringking)  //如果存在则移除
                            SetValue = SetValue ^ TypeEnum.Dringking;
                        break;
                    case "Sleeping":
                        if ((SetValue & TypeEnum.Sleeping) == TypeEnum.Sleeping)  //如果存在则移除
                            SetValue = SetValue ^ TypeEnum.Sleeping;
                        break;
                    case "Playing":
                        if ((SetValue & TypeEnum.Playing) == TypeEnum.Playing)  //如果存在则移除
                            SetValue = SetValue ^ TypeEnum.Playing;
                        break;
                    case "Speaking":
                        if ((SetValue & TypeEnum.Speaking) == TypeEnum.Speaking)  //如果存在则移除
                            SetValue = SetValue ^ TypeEnum.Speaking;
                        break;
                    case "Smiling":
                        if ((SetValue & TypeEnum.Smiling) == TypeEnum.Smiling)  //如果存在则移除
                            SetValue = SetValue ^ TypeEnum.Smiling;
                        break;
                    case "Crying":
                        if ((SetValue & TypeEnum.Crying) == TypeEnum.Crying)  //如果存在则移除
                            SetValue = SetValue ^ TypeEnum.Crying;
                        break;
                    case "Lazing":
                        if ((SetValue & TypeEnum.Lazing) == TypeEnum.Lazing)  //如果存在则移除
                            SetValue = SetValue ^ TypeEnum.Lazing;
                        break;
            return SetValue;

在ViewModel内进行数据绑定:

using System.ComponentModel;
using System.Windows.Input;
namespace CheckBoxConverterDemo
    public class MainWindowViewModel
        public MainWindowViewModel()
            InitData();
        private Person _person;
        public Person Person
            { return _person; }
                _person = value;
                RaisePropertyChanged("Person");
        public ICommand PressOkCommand { get { return new RelayCommand(PressOK, CanPreess); } }
        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropertyChanged(string propertyName)
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        private void InitData()
            Person = new Person();
            //这个是你传入的设定的初始值,比如我开始设置这个人有这三种状态,那么界面就勾选了这三个状态对应的CheckBox,界面在一开始已经给出了
            Person.State = TypeEnum.Dringking | TypeEnum.Smiling | TypeEnum.Playing;  
        private bool CanPreess()
            return true;
        private void PressOK()
            TypeEnum getValue = Person.State;  //这里就是你点击确定后,界面你勾选的返回的当前编辑的这个人的状态

源码:放在CSDN下载了
点击这里下载源码

项目背景:我需要描述一个人的八种不同的行为,每一种行为都是独立的。现在将通过八个CheckBox去分别描述这八种行为,勾选上则存在这种行为,不存在则不勾选,界面图如下:界面代码:&lt;Window x:Class="CheckBoxConverterDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006... 现象:当一个对象集合里,某些属性需要以RadioButton或者CheckBox的形式展现出来,并且会随着切换集合中的对象而变化时,RadioButton绑定不会正确更新,而CheckBox则没问题; 这里以一个小例子来说明: 一个学生集合,每个学生其中包含一个性别属性S 5.5 单选控件和单选组控件(RadioButton 和RadioButtonList) 5.5.1 单选控件(RadioButton) 5.5.2 单选组控件(RadioButtonList) 5.6 复选框控件和复选组控件(CheckBoxCheckBoxList) 5.6.1 复选框控件(CheckBox) 5.6.2 复选组控件(CheckBoxList) 5.7 列表控件(DropDownList,ListBox 和BulletedList) 5.7.1 DropDownList 列表控件 5.7.2 ListBox 列表控件 5.7.3 BulletedList 列表控件 第一篇窗口与界面编程 11 5.8 面板控件(Panel) 5.9 占位控件(PlaceHolder) 5.10 日历控件(Calendar) 5.10.1 日历控件的样式 5.10.2 日历控件的事件 5.11 广告控件(AdRotator) 5.12 文件上传控件(FileUpload) 5.13 视图控件(MultiView 和View) 5.14 表控件(Table) 5.15 向导控件(Wizard) 5.15.1 向导控件的样式 5.15.2 导航控件的事件 5.16 XML 控件 5.17 验证控件 5.17.1 表单验证控件(RequiredFieldValidator) 5.17.2 比较验证控件(CompareValidator) 5.17.3 范围验证控件(RangeValidator) 5.17.4 正则验证控件(RegularExpressionValidator) 5.17.5 自定义逻辑验证控件(CustomValidator) 5.17.6 验证组控件(ValidationSummary) 5.18 导航控件 5.19 其他控件 5.19.1 隐藏输入框控件(HiddenField) 5.19.2 图片热点控件(ImageMap) 5.19.3 静态标签控件(Lieral) 5.19.4 动态缓存更新控件(Substitution) 5.20 小结 第 6 章 Web 窗体的高级控件 6.1 登录控件 6.1.1 登录控件(Login) 6.1.2 登录名称控件(LoginName) 6.1.3 登录视图控件(LoginView) 6.1.4 登录状态控件(LoginStatus) 6.1.5 密码恢复控件(PasswordRecovery) 6.1.6 密码更改控件(ChangePassword) 12 第一篇 窗口与界面编程 6.1.7 生成用户控件(CreateUserWizard) 6.2 网站管理工具 6.2.1 启动管理工具 6.2.2 用户管理 6.2.3 用户角色 6.2.4 访问规则管理 2.6.5 应用程序配置 6.3 使用登录控件 6.3.1 生成用户控件(CreateUserWizard) 6.3.2 密码更改控件(ChangePassword) 6.4 小结 第三篇 数据操作篇 第 7 章数据库与 ADO.NET 基础 7.1 数据库基础 7.1.1 结构化查询语言 7.1.2 表和视图 7.1.3 存储过程和触发器 7.2 使用SQL Server 2005 管理数据库 7.2.1 初步认识SQL Server 2005 7.2.2 创建数据库 7.2.3 删除数据库 7.2.4 备份数据库 7.2.5 还原数据库 7.2.6 创建表 7.2.7 删除表 7.2.8 创建数据库关系图 7.3 ADO.NET 连接SQL 数据库 7.3.1 ADO.NET 基础 7.3.2 连接SQL 数据库 7.3.3 ADO.NET 过程 7.4 ADO 与ADO.NET 7.4.1 ADO 概述 7.4.2 ADO.NET 与ADO 第一篇窗口与界面编程 13 7.5 ADO.NET 常用对象 7.6 Connection 连接对象 7.6.1 连接SQL 数据库 7.6.2 连接Access 数据库 7.6.3 打开和关闭连接 7.7 DataAdapter 适配器对象 7.8 Command 执行对象 7.8.1 ExecuteNonQuery 方法 7.8.2 ExecuteNonQuery 执行存储过程 7.8.3 ExecuteScalar 方法 7.9 DataSet 数据集对象 7.9.1 DataSet 数据集基本对象 7.9.2 DataTable 数据表对象 7.9.3 DataRow 数据行对象 7.9.4 DataView 数据视图对象 7.10 DataReader 数据访问对象 7.10.1 DataReader 对象概述 7.10.2 DataReader 读取数据库 7.10.3 异常处理 7.11 连接池概述 7.12 参数化查询 7.13 小结 第 8 章 Web 窗体的数据控件 8.1 数据源控件 8.1.1 SQL 数据源控件(SqlDataSource) 8.1.2 Access 数据源控件(AccessDataSource) 8.1.3 目标数据源控件(ObjectDataSource) 8.1.4 LINQ 数据源控件(LinqDataSource) 8.1.5 Xml 数据源控件(XmlDataSource) 8.1.6 站点导航控件(SiteMapDataSource) 8.2 重复列表控件(Repeater) 8.3 数据列表控件(DataList) 8.4 数据列表控件(GridView) 8.5 数据绑定控件(FormView) 8.6 数据绑定控件(DetailsView) 14 第一篇 窗口与界面编程 8.7 数据绑定控件(ListView) 8.8 数据绑定控件(DataPager) 8.9 小结 第 9 章 ASP.NET 操作数据库 9.1 使用ADO.NET 操作数据库 9.1.1 使用ExecuteReader()操作数据库 9.1.2 使用ExecuteNonQuery()操作数据库 9.1.3 使用ExecuteScalar()操作数据库 9.1.4 使用ExecuteXmlReader()操作数据库 9.2 ASP.NET 创建和插入记录 9.2.1 SQL INSERT 数据插入语句 9.2.2 使用Command 对象更新记录 9.2.3 使用DataSet 数据集插入记录 9.3 ASP.NET 更新数据库 9.3.1 SQL UPDATE 数据更新语句 9.3.2 使用Command 对象更新记录 9.3.3 使用DataSet 数据集更新记录 9.4 ASP.NET 删除数据 9.4.1 SQL DELETE 数据删除语句 9.4.2 使用Command 对象删除记录 9.4.3 使用DataSet 数据集删除记录 9.5 使用存储过程 9.5.1 存储过程的优点 9.5.2 创建存储过程 9.5.3 调用存储过程 9.6 ASP.NET 数据库操作实例 9.6.1 制作用户界面(UI) 9.6.2 使用GridView 显示、删除、修改数据 9.6.3 使用DataList 显示数据 9.6.4 DataList 分页实现 9.6.5 使用SQLHelper 操作数据库 9.7 小结 第 10 章访问其他数据源 10.1 使用ODBC .NET Data Provider 第一篇窗口与界面编程 15 10.1.1 ODBC .NET Data Provider 简介 10.1.2 建立连接 10.2 使用OLE DB.NET Data Provider 10.2.1 OLE DB.NET Data Provider 简介 10.2.2 建立连接 10.3 访问MySql 10.3.1 MySql 简介 10.3.2 建立连接 10.4 访问Excel 10.4.1 Excel 简介 10.4.2 建立连接 10.5 访问txt 10.5.1 使用ODBE.NET Data Provider 连接txt 10.5.2 使用OLE DB .NET Data Provider 连接txt 10.5.3 使用System.IO 命名空间 10.6 访问SQLite 10.6.1 SQLite 简介 10.6.2 SQLite 连接方法 10.7 小结 第四篇 ASP.NET网络编程 第 11 章用户控件和自定义控件 11.1 用户控件 11.1.1 什么是用户控件 11.1.2 编写一个简单的控件 11.1.3 将Web 窗体转换成用户控件 11.2 自定义控件 11.2.1 实现自定义控件 11.2.2 复合自定义控件 11.3 用户控件和自定义控件的异同 11.4 用户控件示例 11.4.1 ASP.NET 登录控件 11.4.2 ASP.NET 登录控件的开发 11.4.3 ASP.NET 登录控件的使用 16 第一篇 窗口与界面编程 11.5 自定义控件实例 11.5.1 ASP.NET 分页控件 11.5.2 ASP.NET 分页控件的使用 11.6 小结 第 12 章 ASP.NET 的皮肤、主题和母版页 12.1 皮肤和主题 12.1.1 CSS 简介 12.1.2 CSS 基础 12.1.3 CSS 常用属性 12.1.4 将CSS 应用在控件上 12.1.5 主题和皮肤 12.1.6 页面主题和全局主题 12.1.7 应用和禁用主题 12.1.8 用编程的方法控制主题 12.2 母版页 12.2.1 母版页基础 12.2.2 内容窗体 12.2.3 母版页的运行方法 12.2.4 嵌套母版页 12.3 Microsoft Expression 2 12.3.1 Microsoft Expression 2 简介 12.3.2 安装Microsoft Expression 2 12.4 使用Microsoft Expression Web 2 制作页面 12.4.1 创建ASPX 页面 12.4.2 创建CSS 层叠样式表 12.4.3 创建框架集 12.5 小结 第 13 章 ASP.NET 内置对象,应用程序配置和缓存 13.1 ASP.NET 内置对象 13.1.1 Request 传递请求对象 13.1.2 Response 请求响应对象 13.1.3 Application 状态对象 13.1.4 Session 状态对象 13.1.5 Server 服务对象 第一篇窗口与界面编程 17 13.1.6 Cookie 状态对象 13.1.7 Cache 缓存对象 13.1.8 Global.asax 配置 13.2 ASP.NET 应用程序配置 13.2.1 ASP.NET 应用程序配置 13.2.2 Web.config 配置文件 13.2.3 ASP.NET 基本配置节 13.3 ASP.NET 缓存功能 13.3.1 缓存概述 13.3.2 页面输出缓存 13.3.3 页面部分缓存 13.3.4 应用程序数据缓存 13.3.5 检索应用程序数据缓存对象 13.4 小结 第 14 章 ASP.NET XML 和Web Service 14.1 XML 简介 14.2 读写XML 14.2.1 XML 与HTML 14.2.2 创建XML 文档 14.2.3 XML 控件 14.2.4 XML 文件读取类(XmlTextReader) 14.2.5 XML 文件编写类(XmlTextWriter) 14.2.6 XML 文本文档类(XmlDocument) 14.3 XML 串行化 14.3.1 XmlSerializer 串行化类 14.3.2 基本串行化 14.4 XML 样式表XSL 14.4.1 XSL 简介 14.4.2 使用XSLT 14.5 Web 服务(Web Service) 14.5.1 什么是Web 服务 14.5.2 Web 服务体系结构 14.5.3 Web 服务协议栈 14.6 简单Web Service 示例 14.7 自定义Web Service 18 第一篇 窗口与界面编程 14.7.1 创建自定义的Web Service 14.7.2 使用自定义的Web Service 14.8 小结 第五篇 ASP.NET 3.5 高级编程 第 15 章图形图像编程 15.1 图形图像基础 15.1.1 图像布局 15.1.2 GDI+简介 15.1.3 绘制线条示例 15.1.4 .NET Framework 绘图类 15.2 图形编程 15.2.1 Graphics 类 15.2.2 绘制基本图形 15.2.3 图形绘制实例 15.3 绘制文字特效 15.3.1 投影特效 15.3.2 倒影特效 15.3.3 旋转特效 15.4 绘制图片 15.4.1 载入图像文件 15.4.2 GDI+输出图像 15.5 图像特效处理 15.5.1 底片效果 15.5.2 浮雕效果 15.6 小结 第 16 章 ASP.NET 3.5 和AJAX 16.1 AJAX 基础 16.1.1 什么是AJAX 16.1.2 ASP.NET AJAX 入门 16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 第一篇窗口与界面编程 19 16.1.5 AJAX 简单示例 16.2 ASP.NET 3.5AJAX 控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) 16.2.4 更新区域控件(UpdatePanel) 16.2.5 更新进度控件(UpdateProgress) 16.3 AJAX 编程 16.3.1 自定义异常处理 16.3.2 使用母版页的UpdatePanel 16.3.3 母版页刷新内容窗体 16.4 小结 第 17 章 ASP.NET MVC 基础 17.1 了解MVC 17.1.1 MVC 和Web Form 17.1.2 ASP.NET MVC 的运行结构 17.2 ASP.NET MVC 基础 17.2.1 安装ASP.NET MVC 17.2.2 新建一个MVC 应用程序 17.2.3 ASP.NET MVC 应用程序的结构 17.2.4 运行ASP.NET MVC 应用程序 17.3 ASP.NET MVC 原理 17.3.1 ASP.NET MVC 运行流程 17.3.2 ASP.NET MVC 工作原理 17.4 ASP.NET MVC 开发 17.4.1 创建ASP.NET MVC 页面 17.4.2 ASP.NET MVC 数据呈现(ViewData) 17.4.3 ASP.NET MVC 跨页数据呈现(TempData) 17.4.4 ASP.NET MVC 页面重定向 17.4.5 ASP.NET MVC URL 路由(URLRouting) 17.4.6 ASP.NET MVC 控件辅助工具(Helper) 17.4.7 ASP.NET MVC 表单传值 17.5 小结 第 18 章 WCF 开发基础 20 第一篇 窗口与界面编程 18.1 了解WCF 18.1.1 什么是WCF 18.1.2 为什么需要WCF 18.2 WCF 基础 18.2.1 服务 18.2.2 地址 18.2.3 契约 18.3 WCF 应用 18.3.1 创建WCF 应用 18.3.2 创建WCF 方法 18.4 WCF 消息传递 18.4.1 消息传递 18.4.2 消息操作 18.5 使用WCF 服务 18.5.1 在客户端添加WCF 服务 18.5.2 在客户端使用WCF 服务 18.6 小结 第 19 章 WPF 开发基础 19.1 了解WPF 19.1.1 什么是WPF 19.2 WPF 的应用范围 19.2 WPF 和Microsoft Expression 19.2.1 使用Microsoft Expression Blend 设计WPF 19.2.2 WPF 控件样式 19.2.3 浅谈XAML 19.2.4 WPF 控件层次 19.3 WPF 应用程序开发 19.3.1 WPF 动画事件 19.3.2 WPF 时间轴 19.3.3 WPF 事件处理 19.4 WPF 系统开发 19.4.1 WPF 系统需求 19.4.2 WPF 界面开发 19.4.3 WPF 动画制作 19.4.4 WPF 事件编写 第一篇窗口与界面编程 21 19.5 小结 第六篇 ASP.NET 3.5 与LINQ 第20 章 ASP.NET 3.5 与LINQ 20.1 什么是LINQ 20.1.1 LINQ 起源 20.1.2 LINQ 构架 20.1.3 LINQ 与Visual Studio 2008 新特性 20.2 LINQ 与Web 应用程序 20.2.1 创建使用LINQ 的Web 应用程序 20.2.2 基本的LINQ 数据查询 20.2.3 IEnumerable 和IEnumerable<T>接口 20.2.4 IQueryProvider 和IQueryable<T>接口 20.2.5 LINQ 相关的命名空间 20.3 Lambda 表达式 20.3.1 匿名方法 20.3.2 Lambda 表达式基础 20.3.3 Lambda 表达式格式 20.3.4 Lambda 表达式树 20.3.5 访问Lambda 表达式树 20.4 小结 第 21 章使用 LINQ 查询 21.1 LINQ 查询概述 21.1.1 准备数据源 21.1.2 使用LINQ 21.1.3 执行LINQ 查询 21.2 LINQ 查询语法概述 21.3 基本子句 21.3.1 from 查询子句 21.3.2 where 条件子句 21.3.3 select 选择子句 21.3.4 group 分组子句 21.3.5 orderby 排序子句 22 第一篇 窗口与界面编程 21.3.6 into 连接子句 21.3.7 join 连接子句 21.3.8 let 临时表达式子句 21.4 LINQ 查询操作 21.4.1 LINQ 查询概述 21.4.2 投影操作 21.4.3 筛选操作 21.4.4 排序操作 21.4.5 聚合操作 21.5 使用LINQ 查询和操作数据库 21.5.1 简单查询 21.5.2 建立连接 21.5.3 插入数据 21.5.4 修改数据 21.5.5 删除数据 21.6 LINQ 与MVC 21.6.1 创建ASP.NET MVC 应用程序 21.6.2 创建LINQ to SQL 21.6.3 数据查询 21.7 小结 第七篇 ASP.NET 3.5 模块开发 第 22 章注册模块设计 22.1 学习要点 22.2 系统设计 22.2.1 模块功能描述 22.2.2 模块流程分析 22.3 数据库设计 22.3.1 数据库的分析和设计 22.3.2 数据表的创建 22.4 界面设计 22.4.1 基本界面 22.4.2 创建CSS 22.5 代码实现 第一篇窗口与界面编程 23 22.5.1 验证控制 22.5.2 过滤输入信息 22.5.3 插入注册信息 22.5.4 管理员页面 22.6 实例演示 22.7 小结 第 23 章登录模块设计 23.1 学习要点 23.2 系统设计 23.2.1 模块功能描述 22.2.2 模块流程分析 23.3 数据库设计 23.3.1 数据库设计分析 23.3.2 数据库表的创建 23.4 界面设计 23.4.1 基本界面 23.4.2 创建CSS 23.4.3 发送密码页面 23.5 代码实现 23.5.1 登录代码实现 23.5.2 邮件发送页面 23.5.3 根据不同的用户显示不同的内容 23.6 实例演示 23.7 小结 第 24 章广告模块设计 24.1 学习要点 24.2 系统设计 24.2.1 模块功能描述 24.2.2 模块流程分析 24.3 数据库设计 24.3.1 数据库设计分析 24.3.2 数据库表的创建 24.4 界面设计 24.4.1 发布广告界面 24 第一篇 窗口与界面编程 24.4.2 发布广告页数据源配置 24.4.3 修改广告界面 24.4.4 管理广告界面 24.4.5 分类管理界面 24.5 代码实现 24.5.1 广告添加功能 24.5.2 广告修改功能 24.5.3 自定义控件的实现 24.6 实例演示 24.7 小结 第 25 章新闻模块设计 25.1 学习要点 25.2 系统设计 25.2.1 模块功能描述 25.2.2 模块流程分析 25.3 数据库设计 23.3.1 数据库设计 25.3.2 数据表的创建 25.4 界面设计 25.4.1 登录界面 25.4.2 后台框架集 25.4.3 新闻发布页面 25.4.4 新闻修改页面 25.4.5 新闻管理页面 25.4.6 新闻分类管理页面 25.5 代码实现 25.5.1 导航菜单配置 25.5.2 身份验证页面 25.5.3 新闻发布页面 25.5.4 静态生成功能 25.5.5 新闻显示页面 25.5.6 静态模板编写 25.6 实例演示 25.7 小结 第 26 章投票模块设计 第一篇窗口与界面编程 25 26.1 学习要点 26.2 系统设计 26.2.1 模块功能描述 26.2.2 模块流程分析 26.3 数据库设计 26.3.1 数据库设计 26.3.2 数据表的创建 26.4 界面设计 26.4.1 后台框架集 26.4.2 投票管理页面 26.4.3 投票发布页面 26.4.4 投票修改页面 26.4.5 投票删除页面 26.5 代码实现 26.5.1 添加投票代码实现 26.5.2 修改投票代码实现 26.5.3 删除投票代码实现 26.5.4 显示投票代码实现 26.5.5 用户投票代码实现 26.6 实例演示 26.7 小结 第 27 章聊天模块设计 27.1 学习要点 27.2 系统设计 27.2.1 模块功能描述 27.2.2 模块流程分析 27.3 界面设计 27.3.1 登录界面设计 27.3.2 登录界面CSS 27.3.3 聊天室显示界面 27.3.4 聊天室界面CSS 27.4 代码实现 27.4.1 登录代码实现 27.4.2 多人聊天代码实现 27.4.3 单人聊天代码实现 26 第一篇 窗口与界面编程 27.4.4 聊天记录保存实现 27.5 实例演示 27.6 小结 第六篇 ASP.NET 3.5 应用实例 第 28 章制作一个 ASP.NET 留言本 28.1 系统设计 28.1.1 需求分析 28.1.2 系统功能设计 28.1.3 模块功能划分 28.2 数据库设计 28.2.1 数据库的分析和设计 28.2.2 数据表的创建 28.2.3 数据表关系图 28.3 系统公用模块的创建 28.3.1 创建CSS 28.3.2 使用SQLHepler 28.3.3 配置Web.config 28.4 系统界面和代码实现 28.4.1 留言板用户控件 28.4.2 管理员登录实现 28.4.3 用户注册登录实现 28.4.4 用户登录实现 28.4.5 留言本界面布局 28.4.6 留言功能实现 28.4.7 回复功能实现 28.4.8 删除功能的实现 28.4.9 用户索引实现 28.5 用户体验优化 28.5.1 AJAX 留言实现 28.5.2 AJAX 数据绑定 28.5.3 系统导航实现 28.5.4 侧边栏界面优化 28.6 用户功能实现 第一篇窗口与界面编程 27 28.6.1 用户信息界面 28.6.2 用户信息修改实现 28.6.3 用户信息删除实现 28.6.4 用户注销 28.7 实例演示 28.7.1 准备数据源 28.7.2 基本实例演示 28.7.3 用户功能演示 28.8 小结 第 29 章制作一个 ASP.NET 校友录系统 第 29 章制作一个ASP.NET 校友录系统 29.1 系统设计 29.1.1 需求分析 29.1.2 系统功能设计 29.1.3 模块功能划分 29.2 数据库设计 29.2.1 数据库分析和设计 29.2.2 数据表的创建 29.3 数据表关系图 29.4 系统公用模块的创建 29.4.1 使用Fckeditor 29.4.2 使用SQLHelper 29.4.3 配置Web.config 29.5 系统界面和代码实现 29.5.1 用户注册实现 29.5.2 用户登录实现 29.5.3 校友录页面规划 29.5.4 自定义控件实现 29.5.5 校友录页面实现 29.5.6 日志发布实现 29.5.7 日志修改实现 29.5.8 管理员日志删除 29.5.9 日志显示页面 29.5.10 用户索引页面 29.5.11 管理员用户删除 28 第一篇 窗口与界面编程 29.6 用户体验优化 29.6.1 超链接样式优化 29.6.2 默认首页优化 29.6.3 导航栏编写 29.6.4 AJAX 留言优化 29.6.5 优化留言表情 29.7 高级功能实现 29.7.1 后台管理页面实现 29.7.2 日志管理实现 29.7.3 日志修改和删除实现 29.7.4 评论删除实现 29.7.5 板报功能实现 29.7.6 用户修改和删除实现 29.7.7 用户权限管理 29.7.8 权限及注销实现 29.8 实例演示 29.8.1 准备数据源 29.8.2 基本实例演示 29.8.3 管理后台演示 29.9 小结 <ListBox Name="list_axis" DisplayMemberPath="Name" SelectedValuePath="Num" SelectionChanged="list_axis_SelectionChanged"/> DisplayMemberPath属性:显示的值 SelectedValuePath属性:在选中某个Item时我们可以通过ListBox的SelectedValue属性获取的值的类型 我们先构建一个list
public class EnumerationDataProvider : ObjectDataProvider public Type EnumerationType { get; set; } public string NoneValue { get; set; } public string NoneDisplayValue { get;...
<Window x:Class="WPFListView.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns... where T : struct, IConvertible private static Dictionary<int, Tuple<T, string>> collectionCache;
WPF中的DataGrid是一个非常强大的控件,可以用于显示和编辑数据。在WPF中,数据绑定是非常重要的,因为它可以使我们更加方便地将数据数据源绑定到控件。 以下是在WPF中使用DataGrid进行数据绑定的步骤: 1. 创建数据源 首先,我们需要创建一个数据源,可以是一个集合,也可以是一个DataTable。例如,我们可以创建一个名为“myData”的DataTable: DataTable myData = new DataTable(); myData.Columns.Add("Name", typeof(string)); myData.Columns.Add("Age", typeof(int)); myData.Rows.Add("Tom", 20); myData.Rows.Add("Jerry", 30); 2. 设置DataGrid的ItemsSource属性 接下来,我们需要将DataGrid的ItemsSource属性设置为我们的数据源,如下所示: myDataGrid.ItemsSource = myData.DefaultView; 3. 设置DataGrid列 我们需要为DataGrid设置列,让它可以正确地显示我们的数据。可以通过XAML或代码来设置列。以下是在代码中设置列的示例: DataGridTextColumn nameColumn = new DataGridTextColumn(); nameColumn.Header = "Name"; nameColumn.Binding = new Binding("Name"); myDataGrid.Columns.Add(nameColumn); DataGridTextColumn ageColumn = new DataGridTextColumn(); ageColumn.Header = "Age"; ageColumn.Binding = new Binding("Age"); myDataGrid.Columns.Add(ageColumn); 4. 运行程序 现在我们已经完成了数据绑定,可以运行程序并查看DataGrid中的数据了。 以上就是在WPF中使用DataGrid进行数据绑定的基本步骤。需要注意的是,我们可以使用不同的数据源和不同的列类型来实现更加复杂的数据绑定