WPF使用ItemsControl显示、编辑列表数据

WPF ItemsControl控件的详细使用教程 WPF 中的 ItemsControl 是一个灵活的控件,可以显示绑定到集合的多个数据项。ItemsControl 是所有具有列表功能的控件(如 ListBox、ComboBox、TreeView 和 ListView)的基类。 阅读详情

备注:本文由AI自动生成!

在 WPF 中,ItemsControl 结合 DataTemplate 和自定义控件是一种非常强大的组合,可以用来创建高度定制化的用户界面。通过这种方法,你可以将复杂的 UI 逻辑封装到自定义控件中,并通过 DataTemplate 将这些控件应用到数据项的展示上。

下面是一个详细的示例,演示如何使用 ItemsControl、DataTemplate 和自定义控件来展示一个书籍列表。

示例场景

我们将创建一个简单的应用程序,用于展示一组书籍的信息(如书名和作者),并允许用户标记某本书为已读状态。为此,我们将:

  1. 创建一个表示书籍的类。
  2. 创建一个自定义控件来显示每本书的信息。
  3. 使用 ItemsControl 和 DataTemplate 来展示书籍列表。

1. 创建书籍类

首先,我们需要定义一个表示书籍的类。

using CommunityToolkit.Mvvm.ComponentModel;

namespace YourNamespace.Models
{
    public class Book : ObservableObject
    {
        private string _title;
        private string _author;
        private bool _isRead;

        public string Title
        {
            get => _title;
            set => SetProperty(ref _title, value);
        }

        public string Author
        {
            get => _author;
            set => SetProperty(ref _author, value);
        }

        public bool IsRead
        {
            get => _isRead;
            set => SetProperty(ref _isRead, value);
        }

        public Book(string title, string author, bool isRead = false)
        {
            Title = title;
            Author = author;
            IsRead = isRead;
        }
    }
}

2. 创建自定义控件
接下来,我们创建一个自定义控件来显示每本书的信息。这个控件将包含书名、作者以及一个按钮用于标记书籍为已读。

自定义控件 XAML (BookView.xaml)

<UserControl x:Class="YourNamespace.Controls.BookView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="45" d:DesignWidth="300">
    <Border BorderBrush="Gray" BorderThickness="1" Margin="5" Padding="5">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Title}" FontWeight="Bold" VerticalAlignment="Center"/>
            <TextBlock Text=" by " VerticalAlignment="Center"/>
            <TextBlock Text="{Binding Author}" FontStyle="Italic" VerticalAlignment="Center"/>
            <Button Content="Mark as Read" Command="{Binding DataContext.MarkAsReadCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
                    CommandParameter="{Binding}" Margin="10,0,0,0" />
            <TextBlock Text="{Binding IsRead, StringFormat='{}{(0)}', Converter={StaticResource BoolToStringConverter}}" VerticalAlignment="Center" Margin="10,0,0,0"/>
        </StackPanel>
    </Border>
</UserControl>
注意:在这个例子中,我们使用了 RelativeSource={RelativeSource AncestorType=ItemsControl} 来找到包含命令的视图模型。这是因为命令是在视图模型而不是书籍对象中定义的。
自定义控件代码隐藏 (BookView.xaml.cs)
using System.Windows.Controls;

namespace YourNamespace.Controls
{
    public partial class BookView : UserControl
    {
        public BookView()
        {
            InitializeComponent();
        }
    }
}

注意:这里我们假设你已经在资源字典中添加了一个布尔到字符串的转换器(如前面的例子所示)

3. 设置视图模型

现在我们需要设置视图模型来管理书籍集合,并提供命令来处理用户交互。

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;

namespace YourNamespace.ViewModels
{
    public class MainViewModel : ObservableObject
    {
        public ObservableCollection<Book> Books { get; }

        public MainViewModel()
        {
            Books = new ObservableCollection<Book>
            {
                new Book("The Great Gatsby", "F. Scott Fitzgerald"),
                new Book("War and Peace", "Leo Tolstoy"),
                new Book("Pride and Prejudice", "Jane Austen")
            };
        }

        [RelayCommand]
        private void MarkAsRead(Book book)
        {
            if (book != null)
            {
                book.IsRead = true;
            }
        }
    }
}

4. 在主窗口中使用 ItemsControl

最后,在主窗口中使用 ItemsControl 和 DataTemplate 来展示书籍列表.

<Window x:Class="YourNamespace.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:YourNamespace.ViewModels"
        xmlns:controls="clr-namespace:YourNamespace.Controls"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <local:BoolToStringConverter x:Key="BoolToStringConverter"/>
    </Window.Resources>
    <Window.DataContext>
        <local:MainViewModel/>
    </Window.DataContext>
    <Grid>
        <ItemsControl ItemsSource="{Binding Books}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <controls:BookView/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
</Window>

在这个例子中,我们通过 ItemTemplate 使用了自定义控件 BookView 来呈现每个书籍项。这使得我们可以将书籍信息的显示逻辑完全封装在自定义控件内部,从而使主窗口的 XAML 更加简洁。

总结

通过上述步骤,我们成功地结合了 ItemsControl、DataTemplate 和自定义控件来展示一组书籍的数据。这种方法不仅提高了代码的可维护性,还利用了 MVVM 模式的强大功能来分离关注点,使得 UI 和业务逻辑更加清晰。此外,通过使用自定义控件,我们可以轻松地复用和扩展我们的 UI 组件。

WPF篇(16)-ItemsControl基类+Selector基类 很多时候,我们需要显示大量的数据,这些数据虽然众多,但是数据类型结构相同的,由于内容控件只能显示单个元素,要显示或操作多个元素组成的集合,那么,集合控件就派上用场了。WPF中的集合控件种类丰富,有类似表格的DataGrid,有单列表的ListBox,也有介于两者之前的ListView。这些集合控件都有一个共同的基类控件,那就是ItemsControl类,给大家大概列下常用的集合控件。ItemsControl:集合控件的基类,本身也是一个可以实例化的控件ListBox:一个列表集合控件。 阅读详情

相关推荐

别再只用ListBox了!WPF ItemsControl的7种创意用法(附完整代码示例)

本文深入探讨了WPF中ItemsControl控件的7种创意用法,帮助开发者突破ListBox等传统列表控件的思维定式。通过完整的代码示例,展示了如何利用其极致解耦与可定制性,实现瀑布流、环形菜单、时间线、仪表盘、思维导图、游戏棋盘和看板等高级界面,大幅提升WPF应用的UI表现力与开发灵活性。

r7s8t的博客 504

WPF控件-ItemsControl介绍和用法

ItemsControl是用于展示一组项的控件。我们常见的列表(ListBox)、数据表格(DataGrid)等都是继承自ItemsControl。可用于自定义样式展示各种批量的数据集合。设置ItemsPanel布局控件为StackPanel,如果需要横向布局,则设置StackPanel的.设置里面为自己想展示的内容样式,并绑定对应的数据。通过绑定坐标来实现自定义控件按照一定的布局进行摆放,可以用于开发一些组态软件,设备布局图等。

海盗Sharp的博客 7544

WPF之UI进阶--完整了解wpf的控件和布局容器及应用

无论是winform还是wfp,布局容器都是属于控件的一种,只不过说布局容器是一种“装控件的控件”。这里我们来梳理一下他们的关系和使用方法,并且详细介绍他们的使用及注意事项。

河西~石头 4860

wpf中ItemsControl的常用使用方法

WPF(Windows Presentation Foundation)中的ItemsControl是一个用于显示集合数据的控件。它允许您将任何类型的数据绑定到其中,并为每个数据项显示一个模板。在本文中,我们将详细介绍WPF中ItemsControl的各种用法。

Wod_7的博客 6083

WPF ItemsControl实战:从静态列表到动态数据绑定的5个关键技巧

本文深入探讨了WPF ItemsControl的五个核心实战技巧,帮助开发者从静态列表进阶到动态数据绑定。内容涵盖数据绑定哲学、视觉树定制、布局面板选择、MVVM友好交互以及复杂数据处理,旨在提升开发效率并构建高度定制化的列表视图。

weixin_29253711的博客 144

别再只会用DataGrid了!WPF中ItemsControl、ListView、TreeView的实战选型指南

本文深入探讨WPF中ItemsControl、ListView、TreeView等集合控件的选型策略,帮助开发者摆脱DataGrid依赖症。通过特性对比、场景化指南和性能优化技巧,建立科学的选型决策框架,提升开发效率和应用性能。

weixin_30781775的博客 657

2022年5月5日【Jiawei_Z】C# WPF数据模板

C# WPF数据模板 https://www.cnblogs.com/zh7791/p/11449492.html WPF数据模板 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式。 2.针对列表类型的控件, 例如树形控件,下拉列表,列表控件, 可以修改其中的ItemTemplate。 3.修改ContentTemplate, 例UserControl控件的数据展现形式。 CellTemplate 模板 下面用一个例子, 来演示CellTempl

Jiawei_Z的博客 514

WPF集合控件实战指南:从ItemsControl到TreeView的深度解析与应用

本文深度解析WPF集合控件的实战应用,从基础的ItemsControl到高级的TreeView、ListView和DataGrid,提供详细的代码示例和性能优化技巧。通过实际项目案例,展示如何根据场景选择合适的控件组合,提升开发效率和用户体验,特别适合需要处理复杂数据展示的WPF开发者。

weixin_30600197的博客 330

WPF控件ItemsControl、ListBox、ListView、DataGrid、TreeView、TabControl用法及区别

这些控件都是用于在WPF应用程序中呈现数据的控件。它们之间的主要区别在于其用途、功能、视觉外观和自定义选项。可以根据的需求和数据类型来选择适当的控件:如果需要简单地显示一个数据项集合,则可以使用ItemsControl或ListView;如果需要支持选择功能,则可以使用ListBox;如果需要以表格形式查看或编辑数据,则应该使用DataGrid;如果需要显示具有层次结构的数据,则应该使用TreeView;如果需要将不同视图放在不同选项卡页面上,则应该使用TabControl。

studypipi的博客 4998

Gromacs文件格式全解析:xtc vs trr vs cpt,哪种更适合你的模拟需求?

本文深入解析Gromacs分子动力学模拟中的三种核心文件格式xtc、trr和cpt,详细对比其技术特性和适用场景。xtc适合存储效率优先的场景,trr保留完整动力学数据,cpt确保模拟精确重启。通过实际配置示例和存储优化技巧,帮助用户根据模拟需求选择最佳格式组合,平衡分析灵活性与存储成本。

weixin_29281941的博客 97

VMware vCenter 6.7证书过期急救指南:从503报错到完美修复的全流程

本文详细解析了VMware vCenter 6.7因STS证书过期导致503报错的根本原因,并提供了一套从诊断到修复的完整实战流程。内容包括使用checksts.py脚本检测STS证书状态,通过fixsts.sh脚本更新证书,以及利用Certificate-Manager全面重置所有过期证书,帮助管理员快速恢复服务并避免常见陷阱。

weixin_29234239的博客 773

C#怎么操作WPF列表控件 C#如何用ListBox ListView和ItemsControl绑定数据列表显示【控件】

用 ObservableCollection<T> 替代 List<T> —— 它自带集合变更通知,Add/Remove/Clear 都会触发 UI 刷新如果只是改某一项的属性(比如 item.Name = "new"),那该项本身还得实现 INotifyPropertyChanged,否则 ListBox 里显示的还是旧值别直接给 ItemsSource 赋一个新集合(如 listBox.ItemsSource = new List<string>();所有这些功能都得自己补,或者换更高级的控件。

qq_20690139的博客 247

从零组装一台会‘看’的无人机:手把手教你配置NUC机载电脑与D435深度相机(环境搭建篇)

本文详细介绍了如何从零开始组装一台具备视觉能力的智能无人机,重点讲解了NUC机载电脑与D435深度相机的配置方法。通过Ubuntu系统安装、ROS环境搭建、深度学习框架配置等步骤,帮助开发者实现无人机的自主避障和目标跟踪功能。文章还提供了性能优化和常见问题解决方案,是无人机视觉系统开发的实用指南。

weixin_30915275的博客 400

WPF 数据列表展示【DataGrid、ItemsControl】

WPF DataGrid 和列表简单使用

weixin_48611710的博客 933

量化策略分享之首板低开

这个量化策略的核心是选择在低位、首次涨停后次日低开的股票,开盘时买入,上午有盈利就卖出,没有就拿到尾盘在卖出;策略优点在于选择的股票在低位,风险较低,并且刚启动首板,有大资金介入,第二天能快速跑路。

qq_29301281的博客 1470

S32K344 Bootloader实战:一个按键实现从Boot到App的无缝跳转(附完整代码)

本文详细介绍了基于NXP S32K344微控制器的Bootloader开发实战,重点解析如何通过一个硬件按键实现从Boot到App的可靠跳转。内容涵盖内存分区规划、中断向量表重映射、外设初始状态管理等核心要素,并提供了完整的代码示例和调试技巧,适用于汽车电子和工业控制等高可靠性应用场景。

weixin_29192365的博客 309

别再只用ListBox了!WPF ItemsControl的隐藏功能大揭秘(附完整代码示例)

本文深入探讨了WPF ItemsControl的核心优势与隐藏功能,揭示了其作为列表控件基类的强大灵活性。通过对比ListBox,详细讲解了如何利用ItemsPanel自定义布局、使用ItemTemplateSelector实现动态模板,并涵盖分组、虚拟化等高级性能优化技巧,帮助开发者摆脱派生控件的限制,构建高度定制化的数据展示界面。

sprite的博客 779

车间数据孤岛终于破了!C#上位机+MQTT打通产线与MES,数据延迟从小时级降到秒级

本文针对工业上位机开发中常见的车间数据与企业管理系统(MES)割裂问题,提出基于C#和MQTT协议的完整解决方案。通过EMQX MQTT Broker实现数据实时双向传输,将质量追溯时间从2小时缩短至10秒,生产计划自动下发,实现秒级数据延迟。方案采用分层解耦架构,支持设备更换和系统升级,核心优势包括低延迟、高可靠性和易扩展性。文章详细介绍了MQTT协议选型理由、整体架构设计、技术选型(EMQX Broker和MqttNet客户端),并提供了C#实现代码和部署流程。该方案已在实际产线验证,可有效解决&quo

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 484

浅谈WPF之控件模板Control Template和数据模板Data Template

DataGrid预制了几种列展示数据的方式,如:DataGridTextColumn【文本】,DataGridCheckBoxColumn【复选框】,DataGridComboBoxColumn【下拉框】,DataGridHyperlinkColumn【链接】等,如果使用数据模板,则采用DataGridTemplateColumn进行定义。通过定义数据模板,可以丰富数据的展示形式。通过默认创建的控件模板Style,可以修改和重定义控件的显示内容,如:设置按钮显示圆角,和鼠标放上去为红色。

weijia3624的专栏 9145

点云体积计算方法之一 附python代码

另外需要注意,这个只适合点云密集分布的场景来计算体积,比如树木扫描的体积;如果只是有表面积扫描的点云,该方法就不能计算整个物体的体积了。通过计算点云所占用的体素的数量来计算点云的近似体积。这是一个非常粗略的近似值,对于复杂的形状可能不准确。

三维点云技术探索 1888

专转本-信息通信技术-笔记

专转本-信息通信技术-笔记

大今野 1367

C#和WPF实现图形化编程 - 实现图形代码的显示

基于WPF的图形代码的显示 代码树的基本结构 上篇博客中讲解了代码树分为Expression和Statement两种基本结构,比如a+b是个二分法表达式,而c=a+b;是个赋值语句,一个Statement或者expression,可以由多个expression组成。 代码节点的显示 代码节点expression和statement都要重载相应的方法,以获取节点的结构 Expression必须重载 Descriptor Descriptor { get; }方法 Statement必须重载 Descripto

weixin_44067903的博客 1953

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WPF入门基础---数据模板

数据模板的几种类型

Lmj77520的博客 999

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ItemsControl A~Z----深入了解ItemsControl

ItemsControl A~ZItemsControl是WPF控件中最重要的控件之一,大部分控件都或多或少的跟此控件有关,同事发给我了这个链接的时候,我觉得真的有必要好好读一下。毕竟对ItemsControl一直是一知半解,始终不能发挥出它该有的巨大威力。为了更好的理解它,干脆

草莽的专栏 1459

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

浅谈WPF之控件模板和数据模板

DataGrid预制了几种列展示数据的方式,如:DataGridTextColumn【文本】,DataGridCheckBoxColumn【复选框】,DataGridComboBoxColumn【下拉框】,DataGridHyperlinkColumn【链接】等,如果使用数据模板,则采用DataGridTemplateColumn进行定义。通过定义数据模板,可以丰富数据的展示形式。通过默认创建的控件模板Style,可以修改和重定义控件的显示内容,如:设置按钮显示圆角,和鼠标放上去为红色。

绳锯木断,水滴石穿,专心写文,无问西东!!! 2538

WPF ItemsControl 手动刷新

WPF ItemsControl 手动刷新 原文:WPF ItemsControl 手动刷新遇到这样一个问题, 我的ItemsSource是绑定到一个ObservableCollection<T>类型的实力上去的。 但是T类型没有实现INotifyPropertyChanged接口,因为那是一个第三方库里的东西,我也不想在为它做...

weixin_30732825的博客 562
上一篇: CentOS 源码安装subversion
下一篇: Mantis附件存储方式调整
sql2zy
博客等级 码龄19年 37粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值