gpt4 book ai didi

c# - 具有继承类型的 TreeView

转载 作者:行者123 更新时间:2023-12-03 10:27:50 25 4
gpt4 key购买 nike

我想显示一个包含实现接口(interface)的元素的 TreeView。该接口(interface)由两个主要类实现,这两个类是我要显示的。

架构类似于:

IElement
Container : IElement
->public IEnumerable<IElement> Elements {get; set;}
Element : IElement

所以基本上,这个 TreeView 必须能够在任何级别上显示容器和元素。容器应该是“可扩展的”(因为它们包含其他 IElement),但元素不应该。

所以 this solution似乎不适合,因为它设置了两个完全不同的级别(企业/员工)。

我看不到如何用 IElements 填充 TreeView,同时能够检查它们是容器还是元素,以及如何防止仅扩展其中一种类型。

最佳答案

这是否符合您的要求?
这是一个示例:

CS :

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}

public List<IElement> Elements
{
get
{
var list = new List<IElement>();

list.Add(BuildContainer());
list.Add(BuildContainer());
list.Add(new Element());

return list;
}
}

private Container BuildContainer()
{
var container = new Container();

container.Elements.Add(new Element());
container.Elements.Add(new Element());

var sub_container = new Container();
sub_container.Elements.Add(new Element());

container.Elements.Add(sub_container);

return container;
}
}

public interface IElement
{
string Title { get; }
}

public class Container : IElement
{
public string Title
{
get { return "Container"; }
}

private ObservableCollection<IElement> elements;
public ObservableCollection<IElement> Elements
{
get
{
if (elements == null)
{
elements = new ObservableCollection<IElement>();
}
return elements;
}
}
}

public class Element : IElement
{
public string Title
{
get { return "Element"; }
}
}

XAML:
<Window
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>

<DataTemplate DataType="{x:Type local:Element}">
<TextBlock Text="{Binding Title}" Foreground="Red" FontSize="14"/>
</DataTemplate>

<HierarchicalDataTemplate DataType="{x:Type local:Container}" ItemsSource="{Binding Elements}">
<TextBlock Text="{Binding Title}" Foreground="Black" FontWeight="Bold" FontSize="16"/>
</HierarchicalDataTemplate>
</Window.Resources>


<Grid>
<TreeView ItemsSource="{Binding Elements}" />
</Grid>

结果 :

enter image description here

关于c# - 具有继承类型的 TreeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30369981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com