Problème de datatemplateelector
-
28-10-2019 - |
Question
Dans mon projet Silverlight, j'avais besoin d'utiliser DataTemplateSelector
. J'ai trouvé un moyen de mettre en œuvre cela (car il n'est pas présent dans le cadre) ici: http://www.codeproject.com/kb/silverlight/sltemplateelector.aspx
Cette méthode a fonctionné correctement dans d'autres endroits de mon code, mais cette fois, cela ne fonctionne pas. Le problème est que le MemplatesElector n'est jamais appelé (j'ai même essayé de mettre un point d'arrêt dans le constructeur, mais il n'a jamais été frappé). Pouvez-vous voir un problème dans mon code? J'ai utilisé un convertisseur de débogage et j'ai pu voir que mon ListBox
's ItemsSource
est correctement défini.
Merci d'avance !
XAML:
<ListBox Name="DestinationsList" Grid.Column="2" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<helper:TargetTemplateSelector Content="{Binding}">
<helper:TargetTemplateSelector.FirstTemplate>
<DataTemplate>
<TextBlock Text="Test1" />
</DataTemplate>
</helper:TargetTemplateSelector.FirstTemplate>
<helper:TargetTemplateSelector.SecondTemplate>
<DataTemplate>
<TextBlock Text="Test2" />
</DataTemplate>
</helper:TargetTemplateSelector.SecondTemplate>
</helper:TargetTemplateSelector>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Classe Modèle Elector:
public class TargetTemplateSelector : DataTemplateSelector
{
public DataTemplate FirstTemplate { get; set; }
public DataTemplate SecondTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
MyClass1 target = item as MyClass1;
if (target != null)
{
if (target.Profile is MyClass2)
{
return this.FirstTemplate;
}
else if (target.Profile is MyClass3)
{
return this.SecondTemplate;
}
else
{
throw new NotImplementedException();
}
}
return base.SelectTemplate(item, container);
}
}
La solution
Tellement stupide ... Je vais prendre l'excuse que c'est vendredi ...
Le problème était que la valeur liée à la boîte de liste n'était pas une collection ...
Vous pouvez commencer à jeter des pierres ...