我想根据某些属性设置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每次都加载。 怎么了? 谢谢。
答案 0 :(得分:0)
我怀疑绑定无法在找到Id
属性的同一DataContext中找到属性Modules
。因此没有调用转换器。这可能是因为Id
实际上是每个Module
的属性,并且您可以想象为每个项目解析ItemTemplate
绑定。它没有。您有一个模板可以应用于ItemsSource
中的所有项目。