【问题标题】:How to trigger datatemplate selector in Windows Phone?如何在 Windows Phone 中触发数据模板选择器?
【发布时间】:2012-11-20 05:19:39
【问题描述】:

我有一个属性,根据它的状态(比如 A 和 B),我可以显示动画或图像的用户控件。

现在,如果属性发生变化,我想再次触发 datatemplate 选择器。在搜索时,我 found 在 WPF 中我可以使用 DataTemplate.Trigger 但它在 WP 中是 not available

所以,我的问题是

  • 这是他们触发数据模板选择器的一种方式,因此当属性从状态 A 更改为 B 时,会选择适当的用户控件。如果是,请举例说明如何实现。

另外,由于只有两种状态,如果我认为我可以使用Converter来折叠可见性。对于基本的 if else 情况,我需要编写两个转换器。(我能以某种方式只使用一个转换器吗?) 这是确切的情况。

如果状态 == A:

选择 userControl_A

else : 选择 userControl_B

还有,

  • 动画用户控件在折叠状态时会影响性能吗?

EDIT- 刚刚意识到,我可以用参数对象写一个转换器。

【问题讨论】:

    标签: windows-phone-7 windows-phone-7.1 datatemplateselector dynamic-usercontrols


    【解决方案1】:

    您可以像here 中描述的那样实现 DataTemplateSelector。
    我用过,效果很好。

    编辑:
    如果需要在属性发生变化时更新DataTemplate,则应在TemplateSelector中订阅数据对象的PropertyChanged事件,并再次执行SelectTemplate方法。

    这是代码示例:

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        City itemAux = item as City;
    
        // Subscribe to the PropertyChanged event
        itemAux.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(itemAux_PropertyChanged);
    
        return GetTemplate(itemAux, container);
    }
    
    private DataTemplate GetTemplate(City itemAux, DependencyObject container)
    {
        if (itemAux != null)
        {
            if (itemAux.Country == "Brazil")
                return BrazilTemplate;
            if (itemAux.Country == "USA")
                return UsaTemplate;
            if (itemAux.Country == "England")
                return EnglandTemplate;
        }
    
        return base.SelectTemplate(itemAux, container);
    }
    
    void itemAux_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        // A property has changed, we need to reevaluate the template
        this.ContentTemplate = GetTemplate(sender as City, this);
    }
    

    【讨论】:

    • 我见过 DataTemplateSelector。如果属性发生变化,我想要的是重新选择数据模板。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2023-01-05
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多