0

调试这个类,SelectTemplate 方法运行了 2 次,但是为什么呢?

第一次该项目始终为空。

public class PersonDataTemplateSelector : DataTemplateSelector
{
    public override DataTemplate SelectTemplate(object item,DependencyObject container)
    {
        if (item is Person)
        {
            Person person = item as Person;

            Window window = Application.Current.MainWindow;

            if (System.ComponentModel.DesignerProperties.GetIsInDesignMode( window))
                return null;

            if (person.Gender == "male")               
                return window.FindResource("boysViewTemplate") as DataTemplate;
            else                
                return window.FindResource("girlsViewTemplate") as DataTemplate;

        }
        return null;
    }
}
4

2 回答 2

0

您可以设置一个断点并检查堆栈跟踪以进行验证,但我相信它在设置可视化树时使用空输入调用一次,而第二次是实际填充绑定时。

于 2010-03-29T02:14:02.333 回答
0

如果您的选择器要提供“空”或“正在加载”的外观,第一次调用是让您的选择器有机会在元素加载时提供该模板。

于 2010-03-29T02:49:40.573 回答