1

在 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;
    }
}

问题关闭。更新了标题以帮助像我这样的其他新手搜索。

4

2 回答 2

2

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

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

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

在这里,您的 VM/代码隐藏包含SelectedType属性应该实现INotifyPropertyChanged并且应该为SelectedType.

于 2013-10-23T04:43:32.333 回答
0

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

当控件呈现时,SelectTemplate为控件中的每个项目调用。该item参数是模板化对象本身,它会因控件而异。例如,它可以是网格中的一个单元格,也可以是列表中的一个项目。

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

同样的想法,还有ContentTemplateSelectors

于 2013-10-22T23:40:44.057 回答