我刚刚进入WPF领域,我想创建一个自定义控件。我并不太关心它的样式,而是功能。
我正在尝试创建一个自动神奇地填充来自不同库的数据的自定义树视图,以便其他WPF应用程序能够使用此控件,并将此数据公开给用户,并轻松获得反馈
IE:
+-----------------------------+
|+Project |
|+-- File |
|+---- Patch |
|+Other Project |
|+-- Files Are Nifty |
|+---- Yup. |
+-----------------------------+
我希望^ ^是一个可重复使用的控件,它应该在所有实例中始终具有相同的数据。基本上,默认数据绑定。我做了一些谷歌搜索,我在这里搜索,但所有的问题/答案要么不相关,要么是我的头,或两者兼而有之。我发现的唯一有用的信息是在数据提供者中有两个分支,返回一个CompositeCollection。
如果有人能够解释一下WPF自定义控件库的一步一步,我将非常感激。
答案 0 :(得分: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设置为具有类型ObservableCollection<Project>
的ChildCollection的ViewModel。