ListBox 绑定数据源可以是 结构体 吗?

pengchengwanli 2009-08-19 06:52:24
测试文档XAML部分:

<Grid x:Name="LayoutRoot" Background="#5c7590" Width="800" Height="600" HorizontalAlignment="Center" VerticalAlignment="Center">
<ListBox x:Name="lstBox" Width="525" Height="600">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Foreground='#595959' FontSize='13' Height="25" ></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>


测试文档XAML.CS部分:

public Page()
{
InitializeComponent();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//以下两段可以分别测试
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///一、用类实现
//List<MemberClass> lstMemberClass = new List<MemberClass>();

//for (int i = 0; i < 16; i++)
//{
// MemberClass mc = new MemberClass();
// mc.NY = i.ToString();
// mc.DWMC = "God";
// mc.ZBMC = "chen";

// lstMemberClass.Add(mc);
//}

//lstBox.ItemsSource = lstMemberClass;//实体类作为数据源
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///二、用结构体实现
//List<MemberData> lstMemberData = new List<MemberData>();

//for (int i = 0; i < 16; i++)
//{
// MemberData md = new MemberData();
// md.NY = i.ToString();
// md.DWMC = "God";
// md.ZBMC = "chen";
// lstMemberData.Add(md);
//}

//lstBox.ItemsSource = lstMemberData;//结构体做为数据源
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}


测试结果:使用结构体列表做ListBox的数据源不显示数据项,使用类则可以

问题:如何才能使用结构体作ListBox的数据源显示数据项?
...全文
265 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jv9 2009-09-02
  • 打赏
  • 举报
回复
结构体不显示绑定信息。List<class>可以。 你说的效率问题,要多大的数据量呢? List<class>是最通用的方法进行数据绑定。
zhuzhi 2009-09-02
  • 打赏
  • 举报
回复
结构体 是支持绑定的,但是绑定是需要一些规范的写法的。你上面不显示,是因为你写的结构体不是按支持绑定的那种规范写的,要想支持绑定,比如要有成员函数变量的。就是要有你的类的那种写法:public string NY { get; set; }
不能直接这样写:public string NY, DWMC, ZBMC;
pengchengwanli 2009-08-20
  • 打赏
  • 举报
回复
冷秋寒 您好,我使用List<struct>能设为数据源,但不显示绑定字段,似乎不支持绑定,
但使用List<class>就可以,但后者系统开销大啊,数据量如果多的话,效率就是一个不得不关注的问题了,
期盼您的试验结果????
pengchengwanli 2009-08-20
  • 打赏
  • 举报
回复
//用结构体

//用结构体
public struct MemberData
{
public string NY, DWMC, ZBMC;

public MemberData(string ny, string dwmc, string zbmc)
{
NY = ny;
DWMC = dwmc;
ZBMC = zbmc;
}
}

//实体类作为数据源

//实体类作为数据源
public class MemberClass
{
public string NY { get; set; }
public string DWMC { get; set; }
public string ZBMC { get; set; }
}


上面的绑定我没有写 就是在Xaml中写上

<TextBlock Text={Binding DWMC} Foreground='#595959' FontSize='13' Height="25" ></TextBlock>
jv9 2009-08-19
  • 打赏
  • 举报
回复
ListBox可以binding List<T>类型。
可以通过设置datacontent,然后binding。
你的MemberData 是怎么定义的?


public Page()
{
InitializeComponent();
Binding CompanyNameBinding = new Binding("Name");
CompanyNameBinding.Mode = BindingMode.OneWay;
tbxCompanyName.SetBinding(TextBlock.TextProperty,
CompanyNameBinding);
}




<UserControl x:Class="DataBinding。Page"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Width="400" Height="300" >

<UserControl.Resources>
<local:Company x:Key="CLRDS_Company" />
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="White"
DataContext="{StaticResource CLRDS_Company}" Margin="8,8,8,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.38*"/>
<ColumnDefinition Width="0.032*"/>
<ColumnDefinition Width="0.238*"/>
<ColumnDefinition Width="0.028*"/>
<ColumnDefinition Width="0.322*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.103*"/>
<RowDefinition Height="0.114*"/>
<RowDefinition Height="0.783*"/>
</Grid.RowDefinitions>
<TextBlock Grid.ColumnSpan="5" x:Name="tbxCompanyName"/>
<TextBlock Text="{Binding Street}" Grid.ColumnSpan="1" Grid.Row="1" />
<TextBlock Text="," Grid.Column="1" Grid.Row="1" />
<TextBlock Text="{Binding City}" Grid.Column="2"
Grid.ColumnSpan="1" Grid.Row="1" />
<TextBlock Text="," Grid.Column="3" Grid.ColumnSpan="1"
Grid.Row="1" Grid.RowSpan="1"/>
<StackPanel Margin="0,0,0,8" Orientation="Horizontal"
Grid.Column="4" Grid.ColumnSpan="1"
Grid.Row="1" Grid.RowSpan="1">
<TextBlock Margin="0,0,5,0" Text="{Binding State}" />
<TextBlock Text="{Binding Zip}"/>
</StackPanel>
<ListBox x:Name="lbxEmployees" Grid.RowSpan="1" Grid.Row="2"
Grid.ColumnSpan="5" ItemsSource="{Binding Employees}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding FirstName}"
Margin="0,0,5,0" />
<TextBlock Grid.Column="1" Text="{Binding LastName}"
Margin="0,0,5,0"/>
<TextBlock Grid.Column="2" Text="{Binding PhoneNum}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>

</UserControl>


8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧