WPF之Binding基础五 使用集合对象作为列表控件的ItemSource
2013-06-18 21:43
393 查看
我们知道,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; }
}
}
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; }
}
}
相关文章推荐
- WPF中的binding(四)- 使用集合对象作为列表控件的ItemsSource
- Binding(四)——使用集合对象作为列表控件的ItemsSource
- 数据绑定(五)使用集合对象作为列表控件的ItemsSource
- WPF中的binding(八)- 使用ObjectDataProvider对象作为Binding的Source
- 数据绑定(七)使用ObjectDataProvider对象作为Binding的Source
- WPF中的binding(二)- 使用CLR对象或者对象名称作为Binding的数据源
- WPF之Binding基础四 使用DataContext作为Binding的源
- WPF之Binding基础六 使用ADO.NET作为Binding的数据源
- WPF之Binding基础十 使用RelativeSource作为Binding的源
- WPF之Binding基础四 使用DataContext作为Binding的源
- WPF Data Binding之控件作为源(Source)与路径(Path)【二】
- WPF之Binding基础二 控件作为Binding的数据源
- WPF之Binding基础七 使用XML数据作为Binding的源
- WPF之Binding基础九 使用ObjectDataProvider作为Binding的源
- WPF之Binding基础八 使用Linq数据作为Binding的源
- 针对ListView 使用ListViewItem模板导致的ItemSource 变成对象 的原因
- WPF中的binding(三)- 使用DataContext作为Binding的数据源
- WPF Visifire图表控件使用基础
- [Windows Forms] : BindingSource使用模式 - Data Binding基础知识 (二)
- ASP.NET基础教程-DataList数据列表控件-利用DataReader对象作为DataList对象的数据源