1

我正在尝试解决一个复杂的问题。我正在构建一个动态界面,并希望将任何存在的 aArrayList转换为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>然后字典有项目。

4

1 回答 1

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.

于 2010-03-05T11:31:18.527 回答