WPF自定义控件默认绑定
本文关键字:绑定 默认 自定义控件 WPF | 更新日期: 2023-09-27 18:19:00
我刚刚进入WPF领域,我想创建一个自定义控件。我不太关心它的样式,而是关心它的功能。
我正在尝试创建一个自定义树视图,它可以自动神奇地填充来自不同库的数据,以便其他WPF应用程序能够使用这个控件,并将这些数据公开给他们的用户,并轻松获得反馈。
IE:+-----------------------------+
|+Project |
|+-- File |
|+---- Patch |
|+Other Project |
|+-- Files Are Nifty |
|+---- Yup. |
+-----------------------------+
我希望^that^是一个可重用的控件,在它的所有实例中应该总是具有相同的数据。本质上,是一个默认的数据绑定。我在谷歌上搜索了一下,但所有的问题/答案要么不相关,要么超出了我的理解,要么两者兼而有之。我发现的唯一有用的信息是,在数据提供程序中有两个分支,返回一个CompositeCollection。
如果有人能解释这个,一步一步的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。