wpf中 listView 更加字段值不同 用不同的ItemTemplate

我在wpf的listview中写了一个ItemTemplate现在想更具后台list集合中一个字段的值不同而在前台用不同的ItemTemplate如何写呢如何实现求大神指... 我在wpf 的 listview 中写了一个ItemTemplate 现在想更具后台list 集合中一个字段的值不同 而在前台用不同的ItemTemplate 如何写呢 如何实现求大神指教
wpf
展开
 我来答
Mickal小米
2013-04-07 · TA获得超过3666个赞
知道大有可为答主
回答量:1542
采纳率:100%
帮助的人:1761万
展开全部
listview后台绑定数据集合,根据集合中某字段不同使用不同ItemTemplate
根据楼主的问题我根据不同情况给出不同方案:(方便起见,我拿listbox做例子)
1. 集合中某字段不同是指集合中每个实体对象的这一字段统一都发生改变:
我的思路是首先创建一个集合类,listbox的itemtemplate绑定集合值通过转换器拿到想要的DataTemplate
页面的资源:
<Window.Resources>
<converter:TempConverter x:Key="myTempConverter"/>
<DataTemplate x:Key="temp1">
<StackPanel Orientation="Horizontal">
<TextBlock Text="temp1" Margin="0 0 10 0"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="temp2">
<StackPanel Orientation="Horizontal">
<TextBlock Text="temp2" Margin="0 0 10 0"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>

前台:
<ListBox ItemsSource="{Binding pList}" ItemTemplate="{Binding pList,Converter={StaticResource myTempConverter}}" Height="200" x:Name="listBox1" Width="120" />
后台:
public class People
{
public bool IsTemp1 { get; set; }
public string Name { get; set; }
}

public class PeopleList
{
public ObservableCollection<People> pList { get; set; }
}

转换器类:
public class TempConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
List<People> datalist = (List<People>)value;

Window1 window =new Window1();
DataTemplate template = new DataTemplate();
if (datalist[0].IsTemp1 == true)
{
template = window.Resources["temp1"] as DataTemplate;
}
else
{
template = window.Resources["temp2"] as DataTemplate;
}

return template; }
。。。
第二种情况:集合中某字段不同是指集合中每个实体对象的这一字段不同时发生改变:
那我建议只建立一个datatemplate。里面的内容可以放两套:
<DataTemplate x:Key="temp">
<Grid>
<StackPanel Orientation="Horizontal">
<TextBlock Text="temp1" Margin="0 0 10 0"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="temp2" Margin="0 0 10 0"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</Grid>
</DataTemplate>
然后每套的显示绑定该属性,通过转换器转换成可见性即可。
<StackPanel Orientation="Horizontal" Visibility="{Binding 属性,converter ={...}">
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式