WPF自定义控件默认绑定

本文关键字:绑定 默认 自定义控件 WPF | 更新日期: 2023-09-27 18:19:00

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

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

IE:

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

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

如果有人能解释这个,一步一步的WPF自定义控件库,我将不胜感激。

WPF自定义控件默认绑定

如果你的数据总是在相同的模式(例如项目有文件,有补丁),你不一定需要一个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>)。
要设置默认的DataContext,您可以在构造函数中将DataContext设置为具有ObservableCollection<Project>类型的ChildCollection的ViewModel。