2010-03-05 5 views
1

J'essaie de résoudre un problème compliqué. Je construis une interface dynamique et je veux convertir n'importe quelle existence d'un ArrayList en TreeView. J'ai essayé le convertisseur de valeur, mais cela n'a pas fonctionné.Type WPF CLR à UIElement

Voici mon code:

if(current.Value is ArrayList) 
{ 
    var factory = new FrameworkElementFactory(typeof (TreeView)); 

    factory.SetBinding(TreeView.ItemsSourceProperty, new Binding("[" + current.Key + "]")); 
    factory.SetBinding(TreeView.DisplayMemberPathProperty, new Binding("[" + current.Key + "][0].Text")); 

    template = new DataTemplate() {VisualTree = factory}; 
} 

var column = new GridViewColumn 
        { 
         Header = current.Key, 
         CellTemplate = template 
        }; 

gridView.Columns.Add(column); 

Le ArrayList a des éléments qui sont Dictionary<String,Object> et le dictionnaire contient des éléments.

+0

Avez-vous essayé un DataTemplate avec DataType en tant que ArrayList? – Gishu

Répondre

1

Y at-il une raison de ne pas le faire de façon déclarative? Vous pouvez créer un modèle pour vos articles assez facilement:

<DataTemplate x:Key="ArrayListTemplate"> 
    <TreeView> 
     <TreeView.ItemsSource> 
     <Binding Source="[{Binding Key}]"/> 
     </TreeView.ItemsSource> 
     <TreeView.DisplayMemberPath> 
     <Binding Source="[{Binding Key}][0].Text"/> 
     </TreeView.DisplayMemberPath> 
    </TreeView> 
</DataTemplate> 

Je vous avoue que je ne sais pas avec certitude que les liaisons définies ci-dessus fonctionneront. Mais en supposant qu'ils le fassent, le seul autre problème que vous avez est d'appliquer ce modèle uniquement aux éléments dont Value est un ArrayList. Vous devriez être capable d'écrire un sélecteur de template qui fait cela et l'assigner à GridViewColumn.CellTemplateSelector.

+0

J'utilisais la technique ci-dessus mais la liaison ne fonctionnait pas. Je posterai du code dans quelques heures. – azamsharp

Questions connexes