问题
debuging this class the SelectTemplate Method is run 2 times, but why?
The first time the item is always null.
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;
}
}
回答1:
You can set a break point and check the stack trace to verify but I believe it's called once with a null input when the visual tree is set up and the second time is when the bindings are actually populated.
回答2:
If your selector were to provide a look for "Empty" or "Loading", the first call is what gives your selector the opportunity to provide that template while the elements are loading.
来源:https://stackoverflow.com/questions/2534339/why-is-the-selecttemplate-method-run-2-times-in-debug-mode