ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-ContentControl上的绑定内容在DataTemplateSelector中为空

2019-10-30 20:09:20  阅读:134  来源: 互联网

标签:data-binding windows-runtime contentcontrol xaml c


我必须在首页上插入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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有