wpf中 listView 更加字段值不同 用不同的ItemTemplate
我在wpf的listview中写了一个ItemTemplate现在想更具后台list集合中一个字段的值不同而在前台用不同的ItemTemplate如何写呢如何实现求大神指...
我在wpf 的 listview 中写了一个ItemTemplate 现在想更具后台list 集合中一个字段的值不同 而在前台用不同的ItemTemplate 如何写呢 如何实现求大神指教
wpf 展开
wpf 展开
1个回答
展开全部
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 ={...}">
根据楼主的问题我根据不同情况给出不同方案:(方便起见,我拿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 ={...}">
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询