Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF:Treeview项目根使用不同的模板,然后使用子节点_Wpf_Templates_Binding_Treeview - Fatal编程技术网

WPF:Treeview项目根使用不同的模板,然后使用子节点

WPF:Treeview项目根使用不同的模板,然后使用子节点,wpf,templates,binding,treeview,Wpf,Templates,Binding,Treeview,我目前正在尝试将我的业务对象绑定到树视图作为根。并将其集合属性作为子对象。[我想通过绑定实现这一点] 像这样的 public object MyBusinessObject { private int _number; private bool _isSelected; private ObservableCollection<AnotherObject> _other = new ObservableCollection<AnotherObject>(

我目前正在尝试将我的业务对象绑定到树视图作为根。并将其集合属性作为子对象。[我想通过绑定实现这一点]

像这样的

public object MyBusinessObject
{
   private int _number;
   private bool _isSelected;
   private ObservableCollection<AnotherObject> _other = new ObservableCollection<AnotherObject>();


   public int Number { get {return _number;} set {_number = value;}}
   public bool IsSelected{ get {return _isSelected;} set {_isSelected= value;}}
   public ObservableCollection<AnotherObject>  Children { get {return _other;}}

}
公共对象MyBusinessObject
{
私人整数;
私立学校当选;
私有ObservableCollection_other=新ObservableCollection();
公共整数{get{return{u Number;}set{{u Number=value;}}
public bool IsSelected{get{return{u IsSelected;}set{u IsSelected=value;}
公共ObservableCollection子项{get{return}other;}
}
我希望我的treeview可以这样表示:

  • “绑定到IsSelected的复选框”“绑定到数字的文本”
    • 绑定到我的“孩子”的孩子列表
    • 绑定到我的“孩子”的孩子列表
    • 绑定到我的“孩子”的孩子列表
  • “绑定到IsSelected的复选框”“绑定到数字的文本”
    • 绑定到我的“孩子”的孩子列表
    • 绑定到我的“孩子”的孩子列表
    • 绑定到我的“孩子”的孩子列表
我不知道如何在xaml中执行此操作:

  <TreeView x:Name="_tv" ItemsSource="{Binding Path=MyBusinessObject}" >

            <TreeView.Resources>
                <HierarchicalDataTemplate> 
                    <CheckBox Content="{Binding Path=Number} IsChecked="{Binding Path=IsSelected}" />
                </HierarchicalDataTemplate>

                <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                    <TextBlock Text="{Binding Path=Name}" />
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>


当然,可以使用HierarchycalDataTemplate.ItemTemplate属性定义用于收集其他对象实例的数据模板

<TreeView ItemsSource="{Binding SomeCollectionOfObjects}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">

            <!-- This is used for your AnotherObject instances -->
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" />
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>

            <!-- This is used for your MyBusinessObject instances -->
            <CheckBox Content="{Binding Number}" IsChecked="{Binding IsSelected}" />

        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>


WOW,非常感谢,我原以为它不起作用,但当我在我的对象名称上复制你的代码时,结果我输入了一个错误。非常感谢阅读本文的其他人,请确保将ItemsSource=“{Binding Path=MyBusinessObject}”添加到TreeView元素以使其正常工作。OP在其示例中使用了该选项,但这并不一定表示ItemsSource实际上需要是一个对象集合。将其直接绑定到单个MyBusinessObject将不起作用。如果只有一个根项目,它仍然需要在一个根项目的集合中。我添加了一个ItemsSource属性以使示例更清晰。