首页 文章

WPF自定义控件默认数据绑定

提问于
浏览
2

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

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

IE:

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

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

如果有人可以解释这个,一步一步的WPF自定义控件库,我将非常感激 .

1 回答

  • 0

    如果您的数据始终采用相同的模式(例如,Projects have Files,其中包含Patches),则不一定需要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;}
    }
    

    文件有另一个ChildCollection(例如 ObservableCollection<Patch> )a.s.o.
    要设置默认的DataContext,可以将构造函数中的DataContext设置为ViewModel,该ViewModel的ChildCollection类型为 ObservableCollection<Project> .

相关问题