我有一个属性,根据它的状态(比如A和B),我要么显示动画或图像的用户控件。
现在,如果属性发生变化,我想再次触发 datatemplate 选择器。在搜索时,我found在WPF中我可以使用DataTemplate.Trigger但它在WP中是not available。
所以,我的问题是
此外,由于只有两种状态,如果认为我可以使用转换器来折叠可见性。对于基本的if else情况,我需要编写两个转换器。(我可以用一个转换器来做某事吗?) 这是确切的情况。
如果州== A:
选择userControl_A
else:选择userControl_B
此外,
编辑 - 刚才意识到,我可以使用参数对象只写一个转换器。
答案 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);
}