如何在Windows Phone中触发datatemplate选择器?

时间:2012-11-20 05:19:40

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

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

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

所以,我的问题是

  • 是一种触发datatemplate选择器的方法,因此当属性从状态A更改为B时,将选择适当的usercontrol。如果是,那么请举例说明如何实施它。

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

  

如果州== A:

     

选择userControl_A

     

else:选择userControl_B

此外,

  • 动画用户控件会在处于折叠状态时影响效果吗?

编辑 - 刚才意识到,我可以使用参数对象只写一个转换器。

1 个答案:

答案 0 :(得分:3)

您可以实现类似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);
}