c#-ContentControl上的绑定内容在DataTemplateSelector中为空
作者:互联网
我必须在首页上插入SVG徽标作为类别名称,每个类别都有其徽标.
它们在app.xaml中定义为DataTemplates,我将它们包含在ContentControl中的主页中,并带有DataTemplateSelector以显示正确的徽标(徽标的包含无需模板选择器即可,但我需要将其动态包含在内).
这是主页上的xaml:
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Margin="1,0,0,6" Name="CategoryName">
<Button AutomationProperties.Name="Group Title" Click="Category_Click" Style="{StaticResource TextPrimaryButtonStyle}">
<ContentControl Name="CategoryLogo" Content="{Binding Category.Name}" ContentTemplateSelector="{StaticResource LogoTemplateSelector}" IsHitTestVisible="True" Margin="3,-7,10,10"/>
</Button>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
这是我的DataTemplateSelector:
public class LogoTemplateSelector : DataTemplateSelector
{
public string DefaultTemplateKey { get; set; }
protected override DataTemplate SelectTemplateCore(object item, Windows.UI.Xaml.DependencyObject container)
{
var category = item as String;
DataTemplate dt = null;
switch (category)
{
case "Category1": dt = FindTemplate(App.Current.Resources, "Logo1");
break;
case "Category2": dt = FindTemplate(App.Current.Resources, "Logo2");
break;
case "Category3": dt = FindTemplate(App.Current.Resources, "Logo3");
break;
case "Category4": dt = FindTemplate(App.Current.Resources, "Logo4");
break;
default: dt = FindTemplate(App.Current.Resources, "Logo1");
break;
}
return dt;
}
private static DataTemplate FindTemplate(object source, string key)
{
var fe = source as FrameworkElement;
object obj;
ResourceDictionary rd = fe != null ? fe.Resources : App.Current.Resources;
if (rd.TryGetValue(key, out obj))
{
DataTemplate dt = obj as DataTemplate;
if (dt != null)
{
return dt;
}
}
return null;
}
}
我的问题是Content =“ {Binding Category.Name}”似乎不起作用,因为我在DataTemplateSelector中获得的对象项为null.
我确定它应该起作用,因为起初我有一个具有相同绑定的TextBlock,并且它正确显示了类别名称.
我还尝试在ContentControl上使用样式进行绑定,但没有任何改变.
我做错什么了吗 ?
谢谢
解决方法:
确定最终找到了答案:
我必须检查我的项目在模板选择器中是否为空
if (category == null)
{
return null;
}
在初始化数据之前(因此我没有要绑定的类别),将调用DataTemplateSelector一次,并在初始化类别并将其绑定到我的视图之后再次调用DataTemplateSelector.
标签:data-binding,windows-runtime,contentcontrol,xaml,c 来源: https://codeday.me/bug/20191030/1970341.html