WPF CLR Тип UIElement - PullRequest
       5

WPF CLR Тип UIElement

1 голос
/ 05 марта 2010

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

Вот мой код:

 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>, а затем в словаре есть элементы.

1 Ответ

1 голос
/ 05 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...