关于WPF中TreeView控件的数据绑定有关问题
关于WPF中TreeView控件的数据绑定问题
我想在一个TreeView中显示一个包含Rectangle对象的链表,也就是只有一个层次。但是没有得到预期效果,TreeView中空空如也。以下是代码:
在Window.Resources中定义数据模板:
窗口的内容:
这是窗口类的一个成员变量
ObservableCollection<Rectangle> m_rectangles = new ObservableCollection<Rectangle>();
在窗口类的构造函数中:
Rectangle rect1 = new Rectangle();
rect1.ToolTip = "矩形1";
Rectangle rect2 = new Rectangle();
rect1.ToolTip = "矩形2";
m_rectangles.Add(rect1);
m_rectangles.Add(rect2);
m_MyTreeControl.ItemsSource = m_rectangles;
可是最终TreeView中什么也没有。但是,如果我使用一个自定义类的话,TreeView就能够正确工作。请问高手问题出在哪里?难道不能用类型绑定方式运用到WPF类?
------解决思路----------------------
可以是可以。但是,DataType不可以是UIElement的衍生类(我前一贴讲的Visual不准确)。
就是说你自己的Category可以,但WPF的Rectangle类,或Shape类不可以(它们都是UIElement)。
我想在一个TreeView中显示一个包含Rectangle对象的链表,也就是只有一个层次。但是没有得到预期效果,TreeView中空空如也。以下是代码:
在Window.Resources中定义数据模板:
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type Rectangle}">
<TextBlock Text="{Binding Path=ToolTip}"></TextBlock>
</HierarchicalDataTemplate>
</Window.Resources>
窗口的内容:
<Grid>
<TreeView Name="m_MyTreeControl"></TreeView>
</Grid>
这是窗口类的一个成员变量
ObservableCollection<Rectangle> m_rectangles = new ObservableCollection<Rectangle>();
在窗口类的构造函数中:
Rectangle rect1 = new Rectangle();
rect1.ToolTip = "矩形1";
Rectangle rect2 = new Rectangle();
rect1.ToolTip = "矩形2";
m_rectangles.Add(rect1);
m_rectangles.Add(rect2);
m_MyTreeControl.ItemsSource = m_rectangles;
可是最终TreeView中什么也没有。但是,如果我使用一个自定义类的话,TreeView就能够正确工作。请问高手问题出在哪里?难道不能用类型绑定方式运用到WPF类?
------解决思路----------------------
可以是可以。但是,DataType不可以是UIElement的衍生类(我前一贴讲的Visual不准确)。
就是说你自己的Category可以,但WPF的Rectangle类,或Shape类不可以(它们都是UIElement)。
<Window ...
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type sys:Int32}" >
<TextBlock Text="{Binding}" ></TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type sys:Decimal}" >
<TextBlock Text="{Binding}" Background="Red" ></TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type sys:String}" >
<Button><TextBlock Text="{Binding}" /></Button>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView>
<sys:Int32>1234</sys:Int32>
<sys:Decimal>0.002</sys:Decimal>
<sys:String>nihao</sys:String>
</TreeView>
</Grid>
</Window>