0

我有一个属性,并根据它的状态(说A和B)我显示一个用户控件的动画或图像。如何在Windows Phone中触发数据模板选择器?

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

所以,我的问题是

  • 是他们当从状态A到B的属性发生变化,那么相应的用户控件被选中来触发的DataTemplate选择这样的方式。如果是,那么请举例说明如何实现它。

而且,因为只有两种状态,如果认为我可以使用转换知名度。对于基本的其他情况,我需要编写两个转换器(我可以以某种方式使用一个转换器吗?) 下面是确切的情况。

如果状态==答:

选择userControl_A

其他:选择userControl_B

此外,

  • 会时,它的动画用户控件将影响业绩处于折叠状态?

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

回答

3

您可以实现一个DataTemplateSelector,如here所述。
我使用它,它工作得很好。

编辑:
如果您需要更新的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); 
} 
+0

我见过DataTemplateSelector。我想要的是重新选择datatemplate如果属性改变。 – ua741

+0

我编辑了我的答案,告诉我它是否适合你。 –