Silverlight 3:使用UserControls列表作为TreeView的ItemsSource

时间:2009-11-24 17:30:19

标签: silverlight user-controls treeview itemssource

我想用UserControls填充TreeView,但我只希望显示Name属性,而不是整个UserControl。一旦我向myUC添加了一些内容,下面的代码就会给我带来奇怪的崩溃:

C#:

var myUCs = new ObservableCollection<UserControl>();
MyTreeView.ItemsSource = myUCs;

XAML:

<controls:TreeView x:Name="MyTreeView">
    <controls:TreeView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </controls:TreeView.ItemTemplate>
</controls:TreeView> 

有谁知道如何使用UserControls列表作为TreeViews的ItemSource?

3 个答案:

答案 0 :(得分:0)

我找到了一个不太方便的解决方法:使用Dictionary,而不是List of UserControls,并将XAML更改为:

<controls:TreeView x:Name="MyTreeView">
    <controls:TreeView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Key.Name}"/>
        </DataTemplate>
    </controls:TreeView.ItemTemplate>
</controls:TreeView>

答案 1 :(得分:0)

ListBox中存在相同的错误(?),此处提供了一个解决方案: Use UIElements as ItemsSource of ListBox in Silverlight

该特定修复程序不适用于TreeView

答案 2 :(得分:-1)

您可能必须创建自己的类来扩展UserControl并覆盖ToString()方法,以便它返回name属性。