WPF MVVM基础教程(四)复杂列表/数据绑定(集合绑定扩展)
·
复杂列表绑定(集合绑定扩展)
复杂列表如ListView、DataGrid
的绑定,类似集合绑定,集合中的类型换成了定义的类,如果集合需要发生变化的,依旧需要使用ObservableCollection<T>
或者其他继承自INotifyCollectionChanged
接口的集合,在此以ObservableCollection<T>
做示例。
准备工作
创建一个用于绑定类,导入基类
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
public string Desc { get; set; }
}
ListView绑定
添加一个ListView,然后增加对应的列
<ListView Margin="42,46,44,75" d:ItemsSource="{d:SampleData ItemCount=5}">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" />
<GridViewColumn Header="姓名" />
<GridViewColumn Header="Email" />
<GridViewColumn Header="用户名" />
<GridViewColumn Width="100" Header="描述" />
</GridView>
</ListView.View>
</ListView>
注意: d:ItemsSource="{d:SampleData ItemCount=5}"
是在设计器显示效果,实际运行时不产生数据。
添加绑定,将属性一一绑定到对应列上
<!--ListView中的列-->
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Id}" Header="ID" />
<GridViewColumn DisplayMemberBinding="{Binding Name}" Header="姓名" />
<GridViewColumn DisplayMemberBinding="{Binding Email}" Header="Email" />
<GridViewColumn DisplayMemberBinding="{Binding UserName}" Header="用户名" />
<GridViewColumn DisplayMemberBinding="{Binding Desc}" Header="描述" />
</GridView>
</ListView.View>
</ListView>
数据绑定
方式一:
使用控件名称直接绑定其ItemsSource
,定义一个集合,初始化后直接绑定
运行结果:
方式二:
通过ViewModel绑定
创建MainWindowViewModel
,添加相关属性
public class MainWindowViewModel : ViewModelBase
{
private ObservableCollection<User> _users;
public ObservableCollection<User> Users
{
get
{
return _users;
}
set
{
_users = value;
OnPropertyChanged();
}
}
public MainWindowViewModel()
{
UserDataInit();
}
/// <summary>
///模拟数据(忽略)
/// </summary>
void UserDataInit()
{
Users = new ObservableCollection<User>();
for (int i = 0; i < 10; i++)
{
Users.Add(new User()
{
Id = i,
Name = "张三",
Email = "11111@123.com",
UserName = "admin" + i,
Desc = "这是一个用户"
});
}
}
在MainWindow后台代码上加上和ViewModel的绑定
this.DataContext=new MainWindowViewModel();
在XAML中给ListView添加数据源绑定ItemsSource="{Binding Users}"
效果也一样:
DataGrid绑定
和ListView绑定方式基本一样,只是列的形式不一样
XAML
<DataGrid
Grid.Column="1"
Margin="19,49,12,75"
ItemsSource="{Binding Users}"
RenderTransformOrigin="0.5,0.5">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}" Header="ID" />
<DataGridTextColumn Binding="{Binding Name}" Header="姓名" />
<DataGridTextColumn Binding="{Binding Email}" Header="Email" />
<DataGridTextColumn Binding="{Binding UserName}" Header="用户名" />
<DataGridTextColumn Binding="{Binding Desc}" Header="描述" />
</DataGrid.Columns>
</DataGrid>
后台的代码和ListView一样
实现效果:
会发现出现两次一样的列,只要把AutoGenerateColumns
属性设置为False
就行了
效果:
集合绑定绑定扩展
ListBox、ComboBox等绑定多属性的类集合,让其显示其中一个属性
示例(ListBox为例):
<ListBox
Grid.Column="2"
Width="317"
Height="506"
Margin="39,64,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
d:ItemsSource="{d:SampleData ItemCount=5}"
ItemsSource="{Binding Users}" />
ListBox直接绑定Users,界面上只显示类名
此时只需要设置DisplayMenmBerPath
属性为需要显示的属性,ListBox中的项就会显示对应的属性值,而且其SelectedItem属性依旧是选中的类对象
效果:
例子源代码下载:
更多推荐
所有评论(0)