文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

数据绑定ItemsControl

2023-06-06 18:07

关注

本篇内容主要讲解“数据绑定ItemsControl ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据绑定ItemsControl ”吧!

     最近在学习ItemsControl这个控件的时候,查看了MSDN上面的一个例子,并且自己做了一些修改,这里主要使用了两种方式来进行相应的数据绑定,一种是使用DataContext,另外一种是直接将一个类绑定到前台,其实这两种方式原理差不多都是将数据模型的对象添加到一个ObservableCollection集合中,然后再绑定到前台,下面分别介绍两种绑定方式:

第一种

是将数据存储在一个ObservableCollection集合中,然后作为ItemsControl的DataContext对象,下面分别贴出相关的代码: 

<Window x:Class="TestGrid.MainWindow"  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  xmlns:local="clr-namespace:TestGrid"  Title="MainWindow" Height="350" Width="525">  <Grid>  <ItemsControl Margin="10" x:Name="myItemsControl" ItemsSource="{Binding}">      <ItemsControl.Template>    <ControlTemplate TargetType="ItemsControl">     <Border BorderBrush="Aqua" BorderThickness="1" CornerRadius="15">      <ItemsPresenter/>     </Border>    </ControlTemplate>   </ItemsControl.Template>      <ItemsControl.ItemsPanel>    <ItemsPanelTemplate>     <WrapPanel/>    </ItemsPanelTemplate>   </ItemsControl.ItemsPanel>      <ItemsControl.ItemTemplate>    <DataTemplate DataType="{ x:Type local:DataSource}">     <DataTemplate.Resources>      <Style TargetType="TextBlock">       <Setter Property="FontSize" Value="18"/>       <Setter Property="HorizontalAlignment" Value="Center"/>      </Style>     </DataTemplate.Resources>     <Grid>            <Rectangle Fill="Green"/>            <Ellipse Fill="Red"/>      <StackPanel>       <TextBlock Margin="3,3,3,0" Text="{Binding Path=Priority,Mode=TwoWay}"/>       <TextBlock Margin="3,0,3,7" Text="{Binding Path=TaskName,Mode=TwoWay}"/>      </StackPanel>     </Grid>    </DataTemplate>   </ItemsControl.ItemTemplate>     <ItemsControl.ItemContainerStyle>    <Style>     <Setter Property="Control.Width" Value="100"/>     <Setter Property="Control.Margin" Value="5"/>     <Style.Triggers>      <Trigger Property="Control.IsMouseOver" Value="True">       <Setter Property="Control.ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Content.Description}"/>      </Trigger>     </Style.Triggers>    </Style>   </ItemsControl.ItemContainerStyle>  </ItemsControl> </Grid> </Window>

    这里需要注意的地方是 ItemsSource="{Binding}"这句必须添加,否则后台的数据是无法添加到前台的,这个需要注意,这里贴出后台的代码 

using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace TestGrid{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window {  private ObservableCollection<DataSource> item = null;  public MainWindow()  {   InitializeComponent();   item = new ObservableCollection<DataSource>();   item.Add(    new DataSource()    {     Priority = "1",     TaskName = "hello"    }    );   item.Add(     new DataSource()    {     Priority = "2",     TaskName = "whats"    }    );   item.Add(    new DataSource()    {     Priority = "3",     TaskName = "your"    }    );   item.Add(    new DataSource()    {     Priority = "4",     TaskName = "name"    }    );   item.Add(    new DataSource()    {     Priority = "5",     TaskName = "can"    }    );   item.Add(    new DataSource()    {     Priority = "6",     TaskName = "you"    }    );   this.myItemsControl.DataContext = item;  } }}
using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace TestGrid{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window {  private ObservableCollection<DataSource> item = null;  public MainWindow()  {   InitializeComponent();   item = new ObservableCollection<DataSource>();   item.Add(    new DataSource()    {     Priority = "1",     TaskName = "hello"    }    );   item.Add(     new DataSource()    {     Priority = "2",     TaskName = "whats"    }    );   item.Add(    new DataSource()    {     Priority = "3",     TaskName = "your"    }    );   item.Add(    new DataSource()    {     Priority = "4",     TaskName = "name"    }    );   item.Add(    new DataSource()    {     Priority = "5",     TaskName = "can"    }    );   item.Add(    new DataSource()    {     Priority = "6",     TaskName = "you"    }    );   this.myItemsControl.DataContext = item;  } }}

  这里最重要的一句就是 this.myItemsControl.DataContext = item;这个是将刚才的集合绑定到ItemsControl控件上,这里需要我们的注意。

第二种

  另外一种方式的数据绑定就是将一个类绑定到这个ItemsControl控件上,具体的方式如下:

<Window x:Class="TestGrid.MainWindow"  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  xmlns:local="clr-namespace:TestGrid"  Title="MainWindow" Height="350" Width="525"> <Window.Resources>  <local:MyData x:Key="myDataSource"/> </Window.Resources> <Grid>  <ItemsControl Margin="10" x:Name="myItemsControl" ItemsSource="{Binding Source={StaticResource myDataSource}}">      <ItemsControl.Template>    <ControlTemplate TargetType="ItemsControl">     <Border BorderBrush="Aqua" BorderThickness="1" CornerRadius="15">      <ItemsPresenter/>     </Border>    </ControlTemplate>   </ItemsControl.Template>      <ItemsControl.ItemsPanel>    <ItemsPanelTemplate>     <WrapPanel/>    </ItemsPanelTemplate>   </ItemsControl.ItemsPanel>      <ItemsControl.ItemTemplate>    <DataTemplate DataType="{ x:Type local:DataSource}">     <DataTemplate.Resources>      <Style TargetType="TextBlock">       <Setter Property="FontSize" Value="18"/>       <Setter Property="HorizontalAlignment" Value="Center"/>      </Style>     </DataTemplate.Resources>     <Grid>            <Rectangle Fill="Green"/>            <Ellipse Fill="Red"/>      <StackPanel>       <TextBlock Margin="3,3,3,0" Text="{Binding Path=Priority,Mode=TwoWay}"/>       <TextBlock Margin="3,0,3,7" Text="{Binding Path=TaskName,Mode=TwoWay}"/>      </StackPanel>     </Grid>    </DataTemplate>   </ItemsControl.ItemTemplate>     <ItemsControl.ItemContainerStyle>    <Style>     <Setter Property="Control.Width" Value="100"/>     <Setter Property="Control.Margin" Value="5"/>     <Style.Triggers>      <Trigger Property="Control.IsMouseOver" Value="True">       <Setter Property="Control.ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Content.Description}"/>      </Trigger>     </Style.Triggers>    </Style>   </ItemsControl.ItemContainerStyle>  </ItemsControl> </Grid> </Window>

这里我们通过资源来引用一个类,让后使用  ItemsSource="{Binding Source={StaticResource myDataSource}}"将这个类绑定到ItemsSource控件上面,这里贴出相关的代码,我们定义了一个MyData的类,将该类作为数据源绑定到前台上,这个类的代码如下

using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Text;using System.Threading.Tasks;namespace TestGrid{ public class MyData:ObservableCollection<DataSource> {  public MyData()  {    Add (new DataSource()    {     Priority = "1",     TaskName = "My"    }    );   Add(new DataSource()    {     Priority = "2",     TaskName = "Name"    }    );   Add(new DataSource()    {     Priority = "3",     TaskName = "Is"    }    );   Add(new DataSource()    {     Priority = "4",     TaskName = "Ye"    }    );   Add(new DataSource()    {     Priority = "5",     TaskName = "Bo"    }    );    }   }}

  这里面很重要的一部就是让这个类继承自 ObservableCollection<DataSource>,然后来添加相应的数据源,我们在使用继承的时候需要注意这些技巧。

  其实这两种情况都是将一个数据集合绑定到前台,只不过是一些绑定的方式有所不同,实际的原理都是一样的!

到此,相信大家对“数据绑定ItemsControl ”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯