如何触发SelectTemplate /如何使用ContentTemplateSelector

时间:2013-10-22 23:11:45

标签: c# wpf datatemplate

在WPF应用程序中使用DataTemplateSelector时,哪种用户操作会触发DataTemplateSelector.SelectTemple?什么被传递到“对象项目”?

public class ProductTypeTemplateSelector : DataTemplateSelector
{
    public DataTemplate OrangeTemplate { get; set; }
    public DataTemplate AppleTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item,
      DependencyObject container)
    {
        string product_type = (string)item;
        if (product_type == "orange")
            return OrangeTemplate;
        else
            return AppleTemplate;
    }
}

问题已结束。更新了标题,以帮助像我这样的其他新手搜索。

2 个答案:

答案 0 :(得分:1)

假设您的第二个TabItem需要根据选择显示更新的Content。您可以在其中放置ContentControl并将其Content绑定到VM / codebehind上的属性,该属性正在跟踪SelectedItem DataGrid。我相信您会将SelectedItem Tab1的DataGrid绑定到ViewModel / CodeBehind上的属性。假设该属性为SelectedType且类型为string(从您的问题中可以明显看出)。

现在您只需要将ContentControl绑定到此属性并应用ContentTemplateSelector

<ContentControl Content="{Binding DatContext.SelectedType, RelativeSource={RelativeSource AncestorType={x:Type TabControl}" ContentTemplateSelector="{StaticResource myTempalateSelector}"/>

此处包含SelectedType属性的VM / codebehind应该实现INotifyPropertyChanged并且应该为SelectedType引发属性更改。

答案 1 :(得分:0)

某些控件(例如ItemsControl)公开了一个允许您指定DataTemplateSelector的属性。

呈现控件时,将为控件中的每个项调用SelectTemplateitem参数是模板化对象本身,具体取决于控件。例如,Iit可以是网格中的单元格,也可以是列表中的项目。

因此,总而言之,您不需要触发它,该方法将简单地由控件调用。

同样的想法,还有ContentTemplateSelector s