在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;
}
}
问题已结束。更新了标题,以帮助像我这样的其他新手搜索。
答案 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的属性。
呈现控件时,将为控件中的每个项调用SelectTemplate
。 item
参数是模板化对象本身,具体取决于控件。例如,Iit可以是网格中的单元格,也可以是列表中的项目。
因此,总而言之,您不需要触发它,该方法将简单地由控件调用。
同样的想法,还有ContentTemplateSelector
s