【发布时间】:2015-01-21 21:53:32
【问题描述】:
以数据绑定为例,我使用两种方式填充列表框:一种在代码隐藏中,另一种在 Xaml 中。
在代码隐藏中,将列表框绑定到对象实例(在本例中为可观察集合“basicUsers”)相当容易。 在 Xaml 中,我没有成功绑定到实例。似乎只能绑定到一个对象(基于可观察集合的自定义类)。此对象实例中的数据可以用作 XAML 中的数据源吗?
XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<src:CustomTypeUsers x:Key="myDataSource"/>
</Window.Resources>
<Grid>
<ListBox Name="lbUsers" DisplayMemberPath="Name" Margin="10,10,70,141" Width="212"></ListBox>
<ListBox Name="lbUsers2" ItemsSource="{StaticResource myDataSource}" DisplayMemberPath="Name" Margin="10,149,70,0" />
</Grid>
代码隐藏:
using System.Windows;
using System.Collections.ObjectModel;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
private ObservableCollection<User> basicUsers = new ObservableCollection<User>();
private CustomTypeUsers customUsers = new CustomTypeUsers();
public Window1()
{
InitializeComponent();
basicUsers.Add(new User() { Name = "John Doe" });
basicUsers.Add(new User() { Name = "Jane Doe" });
customUsers.Add(new User() { Name = "Natasha Doe" });
customUsers.Add(new User() { Name = "Angelina Doe" });
lbUsers.ItemsSource = basicUsers;
}
private void btnAddUser_Click(object sender, RoutedEventArgs e)
{
basicUsers.Add(new User() { Name = "New user" });
}
}
public class User
{
public string Name { get; set; }
}
public class CustomTypeUsers : ObservableCollection<User>
{
public CustomTypeUsers()
{
Add(new User() { Name = "Emma Doe" });
Add(new User() { Name = "Betty Doe" });
}
}
}
【问题讨论】:
标签: c# wpf xaml observablecollection