2

我刚刚进入 WPF 领域,我想创建一个自定义控件。我不太关心它的样式,而是功能。

我正在尝试创建一个自定义树视图,该树视图自动填充来自不同库的数据,以便其他 WPF 应用程序能够使用此控件,并将此数据公开给他们的用户,并轻松获得反馈。

IE:

+-----------------------------+
|+Project                     |
|+-- File                     |
|+---- Patch                  |
|+Other Project               |
|+-- Files Are Nifty          |
|+---- Yup.                   |
+-----------------------------+

我希望 ^that^ 成为一个可重用的控件,它的所有实例之间应该始终具有相同的数据。本质上,一个默认的数据绑定。我做了一些谷歌搜索,我在这里搜索,但所有的问题/答案要么不相关,要么在我脑海中,要么两者兼而有之。我发现的唯一有用信息是在数据提供程序中有两个分支,返回一个 CompositeCollection。

如果有人可以逐步解释 WPF 自定义控件库,我将不胜感激。

4

1 回答 1

0

如果您的数据始终采用相同的模式(例如,项目有文件,有补丁),您不一定需要 CompositeCollection。您还可以使用 HierarchicalDataTemplates 来显示您的数据,如下所示:

    <HierarchicalDataTemplate x:Key="ProjectTemplate"
ItemsSource="{Binding ChildCollection}"
ItemTemplate="{StaticResource FileTemplate}">
        <here comes the actual TreeViewItem of this Template>
    </HierarchicalDataTemplate>

您的 FileTemplate 是另一个 HierarchicalDataTemplate,这一直持续到您达到最低级别,这将是一个 DataTemplate。所有这些模板都放在资源中,现在您只需将 TreeView 的 ItemTemplate 设置为顶级 HierarchicalDataTemplate (ProjectTemplate):

                    <TreeView ItemsSource="{Binding Path=ChildCollection, UpdateSourceTrigger=PropertyChanged}" ItemTemplate="{StaticResource ResourceKey=ProjectTemplate}">
                    </TreeView>

您的数据可能如下所示:

public class Project
{
     public ObservableCollection<File> ChildCollection {get;set;}
}

一个 File 有另一个 ChildCollection (eg ObservableCollection<Patch>) aso
要设置默认 DataContext,您可以将构造函数中的 DataContext 设置为具有 ChildCollection 类型的 ViewModel ObservableCollection<Project>

于 2013-06-18T06:54:07.287 回答