Silverlight ItemTemplate绑定

时间:2010-10-15 10:38:24

标签: silverlight windows-phone-7

我想根据某些属性设置ItemTimplate。 我刚刚创建了一个标记,我在其中设置了ItemTemplate:

<controls:Panorama Title="Some Title" ItemsSource="{Binding Modules}" ItemTemplate="{Binding Id, Converter={StaticResource ControlTemplateConverter}}">

    <controls:Panorama.Background>
        <ImageBrush ImageSource="PanoramaBackground.png"/>
    </controls:Panorama.Background>

</controls:Panorama>

并像这样实现ControlTemplateConverter:

public class ControlTemplateConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        StringBuilder sbTemp = new StringBuilder();
        sbTemp.Append("<DataTemplate ");
        sbTemp.Appen("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");
        sbTemp.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
        sbTemp.Append("<StackPanel>");
        sbTemp.Append("<TextBlock Text=\"News News\" />");
        sbTemp.Append("</StackPanel>");
        sbTemp.Append("</DataTemplate>");
        return (DataTemplate)XamlReader.Load(sbTemp.ToString());
    }

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

我注册了转换器:

<UserControl.Resources>
    <converter:ControlTemplateConverter x:Key="ControlTemplateConverter" />
</UserControl.Resources>

但是当我在ControlTemplateConverter.Convert中设置断点时,它永远不会在调试中停止。 ItemSource每次都加载。 怎么了? 谢谢。

1 个答案:

答案 0 :(得分:0)

我怀疑绑定无法在找到Id属性的同一DataContext中找到属性Modules。因此没有调用转换器。这可能是因为Id实际上是每个Module的属性,并且您可以想象为每个项目解析ItemTemplate绑定。它没有。您有一个模板可以应用于ItemsSource中的所有项目。