您的位置:首页 > 其它

Silverlight中需要用到模板选择器(DataTemplateSelector)的替代方案

2013-03-30 15:59 465 查看
在WPF下的ListBox,如果我们需要让不同的项根据绑定的值选择不同的数据模板显示,只需要设置ListBox.ItemTemplateSelector属性即可,但在Silverlight下的ListBox控件却没有此属性,因此需要使用另外的方式达到同样的效果。

下面给出了一个在Silverlight中需要用到模板选择器的情况下的替代方案,或者说是解决这类方法的一个新的思路。

那就是使用值转换器(IValueConverter)代替模板选择器(DataTemplateSelector)。

public class TemplateConverter : IValueConverter
{
public ControlTemplate Template1 { get; set; }
public ControlTemplate Template2 { get; set; }

private bool flag = false;
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
flag = !flag;

if (flag)
{
return Template1;
}
else
{
return Template2;
}
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}


<UserControl.Resources>
<ControlTemplate TargetType="ContentControl" x:Key="t1">
<TextBlock Text="{Binding}" Foreground="Blue" />
</ControlTemplate>
<ControlTemplate TargetType="ContentControl" x:Key="t2">
<TextBlock Text="{Binding}" Foreground="Red" />
</ControlTemplate>

<local:TemplateConverter x:Key="TemplateConverter" Template1="{StaticResource t1}" Template2="{StaticResource t2}" />
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="White">
<ListBox ItemsSource="{Binding SS}">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl Template="{Binding Converter={StaticResource TemplateConverter}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>


示例代码:SilverlightApplication16.zip

这是我的第一篇博客,有不足之处请见谅。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐