0

我想使用以下模型在 TreeView 上创建数据绑定:

public partial class MainWindow : Window
{
    private ViewModel model = new ViewModel();

    public MainWindow()
    {
        InitializeComponent();
        DataContext = model;
    }
    ...
}

public class ViewModel : ObservableObject
{
    private IList<Document> sourceDocuments;

    public IList<Document> SourceDocuments
    {
        get { return sourceDocuments; }
        set
        {
            sourceDocuments = value;
            OnPropertyChanged("SourceDocuments");
        }
    }

    public ViewModel()
    {
        SourceDocuments = new ObservableCollection<Document>();
    }
}

public class Document
{
    public String Filename;
    public IList<DocumentBlock> Blocks { get; set; }

    public Document(String filename)
    {
        this.Filename = filename;
        Blocks = new List<DocumentBlock>();
    }
}

public class DocumentBlock
{
    public String Name { get; private set; }

    public DocumentBlock(String name)
    {
        this.Name = name;
    }

    public override string ToString()
    {
        return Name;
    }
}

而这个 XAML

 <TreeView HorizontalAlignment="Left" Margin="6,6,0,6" Name="SourceDocumentsList" Width="202" 
     ItemsSource="{Binding SourceDocuments}">
     <TreeView.ItemTemplate>
         <HierarchicalDataTemplate ItemsSource="{Binding /Blocks}">
             <TextBlock Text="{Binding /Name}" />
         </HierarchicalDataTemplate>
     </TreeView.ItemTemplate>
 </TreeView>

我收到错误消息'Blocks' property not found on 'current item of collection' ''Document'。为什么是这样?

4

1 回答 1

4

您应该删除/,DataContext中的ItemTemplate是一个项目,它本身没有当前项目。绑定也Name不起作用,因为DataContext仍然是 a ,Document您可以指定HierarchicalDataTemplate.ItemTemplate,从.DataContextDocumentBlockBlocks

您通常用于TreeView 之外的/详细信息视图,例如<TextBlock Text="{Binding SourceDocuments/Blocks[0].Name}"/>

于 2012-07-11T14:03:44.530 回答