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);
    }
}
Était-ce utile?

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 ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top