2010-03-05 1 views
1

Я пытаюсь решить сложную проблему. Я создаю динамический интерфейс и хочу преобразовать любое существование ArrayList в TreeView. Я попробовал конвертер значений, но он не сработал.WPF CLR Тип для UIElement

Вот мой код:

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); 

ArrayList имеет элементы, которые Dictionary<String,Object>, а затем в словаре пунктов.

+0

Пробовал ли DataTemplate с DataType как ArrayList? – Gishu

ответ

1

Есть ли причина не делать это декларативно? Вы можете создать шаблон для ваших деталей довольно легко:

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

Я признаюсь, что я не знаю наверняка, что привязки, определенные выше, будет работать. Но при условии, что они это делают, единственная другая проблема, с которой вы сталкиваетесь, заключается в применении этого шаблона только к элементам, Value - ArrayList. Вы должны иметь возможность написать селектор шаблонов, который делает это, и назначить его GridViewColumn.CellTemplateSelector.

+0

Я использовал вышеупомянутую технику, но привязка не работала. Через несколько часов я отправлю код. – azamsharp

 Смежные вопросы

  • Нет связанных вопросов^_^