【问题标题】:WPF Custom Control Default DatabindingWPF 自定义控件默认数据绑定
【发布时间】:2013-06-14 05:24:01
【问题描述】:

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

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

IE:

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

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

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

【问题讨论】:

    标签: c# .net wpf user-controls controls


    【解决方案1】:

    如果您的数据始终采用相同的模式(例如,项目有文件,有补丁),您不一定需要 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&lt;Patch&gt;)a.s.o.
    要设置默认 DataContext,您可以将构造函数中的 DataContext 设置为具有 ObservableCollection&lt;Project&gt; 类型的 ChildCollection 的 ViewModel。

    【讨论】:

    • 但是我应该把 XAML(哪个文件)放在哪里?
    • 但是...我不希望使用我的东西的代码必须执行任何自定义 XAML。
    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2010-11-08
    • 2013-03-15
    相关资源
    最近更新 更多