WPF入门:DataTemplate


前言

例如:根据网上了解和学习,整理了对WPF中DataTemplate的理解


一、DataTemplate含义

DataTemplate是模板(Template)中的一类,,控件可引用DataTemplate即可实现对同一模板数据的动态显示

二、实现步骤

1.新建类

定义数据类型,如下:
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApp1.Models
{
    /// <summary>
    /// 
    /// </summary>
    internal class TestModel
    {
        /// <summary>
        /// 名称
        /// </summary>
        public string TestName { get; set; }

        /// <summary>
        /// 值
        /// </summary>
        public int TestValue { get; set; }
    }
}

2.新建视图模型

实现数据初始化与变化监控,如下:
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WpfApp1.Models;

namespace WpfApp1.ViewModels
{
    internal class MainWindowVM : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler? PropertyChanged;

        public MainWindowVM()
        {
            #region 初始化数据
            TestModelList = new List<TestModel>();

            TestModelList.Add(new TestModel { TestName = "111", TestValue = 1 });
            TestModelList.Add(new TestModel { TestName = "222", TestValue = 2 });
            TestModelList.Add(new TestModel { TestName = "333", TestValue = 3 });
            TestModelList.Add(new TestModel { TestName = "4444", TestValue = 4 });
            TestModelList.Add(new TestModel { TestName = "555", TestValue = 5 });
            TestModelList.Add(new TestModel { TestName = "666", TestValue = 6 });
            #endregion
        }

        #region 变量变化
        /// <summary>
        /// 
        /// </summary>
        private List<TestModel> _TestModelList;

        /// <summary>
        /// 监控数据
        /// </summary>
        public List<TestModel> TestModelList
        {
            get { return _TestModelList; }
            set
            {
                _TestModelList = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("TestModelList"));
                }
            }
        }
        #endregion
    }
}

代码编写完后,主界面MainWindow需要绑定MainWindowVM,如下:

/// <summary>
/// 视图模型
/// </summary>
MainWindowVM mainWindowVM = new MainWindowVM();

public MainWindow()
{
    InitializeComponent();
    this.DataContext = mainWindowVM;


}

在这里插入图片描述


3.前端实现

代码与效果如下:

<GroupBox>
    <ItemsControl ItemsSource="{Binding TestModelList}" VerticalAlignment="Center">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="4"></UniformGrid>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,5">
                    <TextBlock Text="{Binding TestName}" FontSize="16" Foreground="Black" Margin="0,5"></TextBlock>
                    <TextBlock Text="{Binding TestValue}" FontSize="10" Foreground="Green" Margin="0,5"></TextBlock>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</GroupBox>

在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值