0

我正在为 Visual Studio 加载项开发新功能。最初该项目的目标框架是 3.5。但是我被要求使用 WPF 添加一个具有相当复杂 UI 的工具窗口并切换到 4.0 框架(也许这很重要) 我正在尝试将分层数据绑定到我的工具窗口中的树视图,它最初是一个 WPF 用户控件。

但我看到以下错误:“System.Windows.Data 错误:40:BindingExpression 路径错误:在 'object' ''OpjectPool' (Name='')' 上找不到 'PoolList' 属性。BindingExpression:Path=PoolList; DataItem ='OpjectPool' (Name=''); 目标元素是 'TreeView' (Name='treeView1'); 目标属性是 'ItemsSource' (类型 'IEnumerable')"

这是一个代表我需要绑定到树视图的数据的类。

class CodeItem
{
public TextPoint StartPoint { get; set; }
public TextPoint EndPoint { get; set; }
public string Name { get; set; }
public vsCMElement Kind { get; set; }
public CodeElements ChildClasses { get; set; }
public ProjectItem ProjectItem { get; set; }
public List<CodeItem> CodeItems { get; set; }
public string Label { get; set; }

public CodeItem(CodeElement el)
{
    StartPoint = el.StartPoint;
    EndPoint = el.EndPoint;
    Name = el.Name;
    Kind = el.Kind;
    ChildClasses = el.Children;
    ProjectItem = el.ProjectItem;
    Label = Kind.ToString();

    CodeItems = new List<CodeItem>();
    if (ChildClasses.Count != 0)
    {
        foreach (CodeElement elem in ChildClasses)
        {
            if (elem.Kind.ToString() == "vsCMElementClass")
            {
                CodeItems.Add(new CodeItem(elem));
            }
        }
    }
}
}

这是我的用户控件代码:

public partial class OpjectPool : UserControl
{
    public ObservableCollection<CodeItem> PoolList = new ObservableCollection<CodeItem>();

    public OpjectPool()
    {

        Project pr = ... // getting VS Project we want to work with;

        foreach (ProjectItem item in pr.ProjectItems.Item("Objects").ProjectItems)
        {
            if (item.FileCodeModel != null)
            {
                CodeItem rootPoolItem = new CodeItem(item.Name);

                foreach (CodeElement el in item.FileCodeModel.CodeElements)
                {
                    if (el.Kind.ToString() == "vsCMElementClass" || el.Kind.ToString() == "vsCMElementNamespace")
                    {
                        CodeItem ci = new CodeItem(el);

                        rootPoolItem.CodeItems.Add(ci);

                    }
                }

                PoolList.Add(rootPoolItem);
            }
        }

        InitializeComponent();

        this.treeView1.DataContext = this;
   }
}

这是一个 XAML 代码:

<UserControl x:Class="******.OpjectPool"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid Height="Auto" Name="maingrid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*" />
        <ColumnDefinition Width="1*" />
        <ColumnDefinition Width="1*" />
    </Grid.ColumnDefinitions>
    <ScrollViewer Grid.Column="0" Height="Auto" HorizontalAlignment="Stretch" Name="scrollViewer1" VerticalAlignment="Stretch" Width="Auto" HorizontalScrollBarVisibility="Visible">
        <TreeView Height="Auto" Name="treeView1" Width="Auto" ItemsSource="{Binding PoolList}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding CodeItems}" >
                    <TreeViewItem Header="{Binding Label}"/>
                </HierarchicalDataTemplate >
             </TreeView.ItemTemplate>
        </TreeView>
    </ScrollViewer>
    <ScrollViewer Grid.Column="1" Height="Auto" HorizontalAlignment="Stretch" Name="scrollViewer2" VerticalAlignment="Stretch" Width="Auto" HorizontalScrollBarVisibility="Visible" Grid.ColumnSpan="1">
        <DataGrid AutoGenerateColumns="False" Height="Auto" Name="dataGrid1" Width="Auto" FrozenColumnCount="3" />
    </ScrollViewer>
    <ScrollViewer Grid.Column="2" Height="Auto" HorizontalAlignment="Stretch" Name="scrollViewer3" VerticalAlignment="Stretch" Width="Auto" HorizontalScrollBarVisibility="Visible" Grid.ColumnSpan="1">
        <DataGrid AutoGenerateColumns="False" Height="Auto" Name="dataGrid2" Width="Auto" />
    </ScrollViewer>
    <GridSplitter Grid.Column="1" Name="gridSplitter1" ResizeDirection="Columns" BorderBrush="Black" Background="Black" Margin="0,0,0,0" Grid.ColumnSpan="1" HorizontalAlignment="Left" Width="2" />
    <GridSplitter Grid.Column="2" Name="gridSplitter2" ResizeDirection="Columns" BorderBrush="Black" Background="Black" Margin="0,0,0,0" Grid.ColumnSpan="1" HorizontalAlignment="Left" Width="2" />
</Grid>

PoolList 不为空,并且包含我需要绑定的完整层次结构。有趣的是,错误消息说的是对象的真实而不是空属性

4

1 回答 1

1

如错误所述:

BindingExpression path error: 'PoolList' PROPERTY not found on 'object' ''OpjectPool' (Name='')'. BindingExpression:Path=PoolList;

PoolList is not a property.

于 2013-03-12T12:59:04.577 回答