绑定ListBox问题
假如有个User对象有:Id,Name,Age
有另外一个SubDetails对象有:Id,UserId,DetailsName
现在我想在ListBox绑定SubDetails对象,但是想把UserId显示为Users表的Name值,如何做?
请教大神!
Silverlight? ListBox
[解决办法]
在Silverlight中我们经常看到数据绑定源由DataContext或者ItemsSource指定,那么他们之间的区别有哪些呢?
DataContext:从英文字母意思是数据上下文,在Silverlight中某个父级元素设置了DataContext,那么其子元素将可以继承并且使用DataContext中的属性。DataContext绑定的数据源可以是实体集合、实体、属性等。
ItemsSource:其数据源通常是实体集合(多列数据),无法让其子元素继承使用。
下面我们以一个实例主要讲解DataContext的用法,其中在父级元素Grid设置了一个DataContext属性绑定实体,该实体内部有一个属性为实体集合,此实体集合用于Grid的子元素ListBox的ItemsSource属性绑定。代码如下:
首先我们看两个实体,其中一个实体属性为List<>:
public class ClaModel
{
public ClaModel()
{
ClaName = "五年级三班";
ClaInfo = "全校最好的班级,获得多项荣誉";
StuList = new List<StuModel>()
{
new StuModel(){StuName="刘三", StuAge=15, StuInfo="他很勤奋"},
new StuModel(){StuName="李四", StuAge=14, StuInfo="他很懒惰"},
new StuModel(){StuName="王五", StuAge=16, StuInfo="他很聪明"}
};
}
public string ClaName { get; set; }
public string ClaInfo { get; set; }
public List<StuModel> StuList { get; set; }
}
public class StuModel
{
public string StuName { get; set; }
public int StuAge { get; set; }
public string StuInfo { get; set; }
}
其次我们来看Xaml代码绑定如下:
<UserControl x:Class="SLDataContext.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
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"
xmlns:local="clr-namespace:SLDataContext"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<!--第一种方式-->
<UserControl.Resources>
<local:ClaModel x:Key="ClaSource" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource ClaSource}">
<TextBlock FontWeight="Bold" Width="60" Height="30" Text="{Binding ClaName}"
VerticalAlignment="Top" HorizontalAlignment="Left" />
<TextBlock FontStyle="Italic" Width="160" Height="30" Text="{Binding ClaInfo}"
VerticalAlignment="Top" Margin="70 0 0 0" HorizontalAlignment="Left" />
<ListBox Height="239" HorizontalAlignment="Left" Name="lbDetail"
VerticalAlignment="Top" Width="343" ItemsSource="{Binding StuList}"
SelectedValuePath="StuAge" DisplayMemberPath="StuName" Margin="27,61,0,0" />
</Grid>
</UserControl>
最后我们看看另外一种后台绑定DataContext的方式。
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
//第二种方式:也可以用后台代码绑定DataContext
//this.LayoutRoot.DataContext = new ClaModel();
}
}
楼主参考一下吧。
[解决办法]
http://www.cnblogs.com/chengxingliang/archive/2012/04/23/2464952.html能有很多收获。。。
[解决办法]
有一种办法是给SubDetails对象增加一个属性为:Id,UserId,DetailsName,UserData
UserData属性根据UserID获取User对象。
具体情况需要看你的实际需要,可以描述得更清楚。