zoukankan      html  css  js  c++  java
  • WPF之Binding基础五 使用集合对象作为列表控件的ItemSource

      我们知道,C#里面所有可以被迭代便利的集合都继承了IEnumerable接口,WPF中的列表控件都继承了ItemsControl这个类,所有就有ItemSource这个属性,而ItemSource是可以接受一个派生自IEnumerable这个接口的实例作为自己的直。所以说ListBox就有ListBoxItem这个跳模容器。当我们为一个ItemControl对象设置了ItemSource的时候,他就会自己去循环其中的数据元素。

      ItemTemplate属性的类型三DataTemplate,因为继承制ItemControl这个类(事例二就很好的体现了)

    XAML代码

    <Window x:Class="使用集合对象作为列表控件的ItemSource.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <!--案例一-->
    <!--<StackPanel x:Name="stackpanel" Background="LightBlue">
    <TextBlock Text="Age" FontWeight="Bold" Margin="5"/>
    <TextBox x:Name="txtAge" Margin="5"/>
    <TextBlock Text="List" FontWeight="Bold" Margin="5"/>
    <ListBox x:Name="List" Height="150" Margin="5"/>
    </StackPanel>-->
    <!--案例二-->
    <StackPanel x:Name="stackpanel" Background="LightBlue">
    <TextBlock Text="Age" FontWeight="Bold" Margin="5"/>
    <TextBox x:Name="txtAge" Margin="5"/>
    <TextBlock Text="List" FontWeight="Bold" Margin="5"/>
    <ListBox x:Name="List" Height="150" Margin="5">
    <ListBox.ItemTemplate>
    <DataTemplate>
    <!--Orientation="Horizontal"水平显示-->
    <StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding Path=Age}" Width="30"/>
    <TextBlock Text="{Binding Path=Name}" Width="30"/>
    </StackPanel>
    </DataTemplate>
    </ListBox.ItemTemplate>
    </ListBox>
    </StackPanel>
    </Window>

    CS代码

    namespace 使用集合对象作为列表控件的ItemSource
    {
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();
    //方案一
    //一个简单的list集合
    List<User> list = new List<User>()
    {
    new User(){Age=18,Name="张三"},
    new User(){Age=20,Name="李氏"},
    new User(){Age=19,Name="张五"},
    new User(){Age=29,Name="李广"},
    new User(){Age=36,Name="张笑话"},
    new User(){Age=25,Name="李小天"},
    };

    ObservableCollection<User> oc = new ObservableCollection<User>()
    {
    new User(){Age=18,Name="张三"},
    new User(){Age=20,Name="李氏"},
    new User(){Age=19,Name="张五"},
    new User(){Age=29,Name="李广"},
    new User(){Age=36,Name="张笑话"},
    new User(){Age=25,Name="李小天"},
    };

    //为listbox设置属于源,数据源为list
    //this.List.ItemsSource = list;
    //因为ObservationCollection实现了INotifyCollectionChanged和INotifyPropertyChanged接口,能把集合的变化及时的显示出来,推荐用
    //数据源为oc的时候
    //this.List.ItemsSource = oc;
    //this.List.DisplayMemberPath = "Name";

    //Binding binding = new Binding("SelectedItem.Age") {Source = this.List};
    //this.txtAge.SetBinding(TextBox.TextProperty, binding);


    //方案二
    this.List.ItemsSource = oc;
    Binding binding = new Binding("SelectedItem.Age") { Source = this.List };
    this.txtAge.SetBinding(TextBox.TextProperty, binding);
    }
    }
    }

    User类

    namespace 使用集合对象作为列表控件的ItemSource
    {
    class User
    {
    public int Age { get; set; }
    public string Name{ get; set; }
    }
    }

  • 相关阅读:
    Java代理(静态/动态 JDK,cglib)
    Java数据库基础(JDBC)
    Servlet基础(工作原理、生命周期)
    Java XML DOM解析(xPath)
    java 文件操作
    从源码看集合ArrayList
    全面理解java异常机制
    python3 利用pip安装ipython notebook
    Centos的一个find命令配合rm删除某天前的文件
    在Pandas中直接加载MongoDB的数据
  • 原文地址:https://www.cnblogs.com/lijin/p/3143228.html
Copyright © 2011-2022 走看看