gpt4 book ai didi

c# - 绑定(bind)到 WPF 中的 TreeView

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:30 24 4
gpt4 key购买 nike

我正在尝试将模型持有的对象集合绑定(bind)到 WPF 中的 TreeView 。我执行此操作的 XML 基于 WPF Treeview Databinding Hierarchal Data with mixed types但我没有任何运气。

对于 TreeView ,我当前的 XAML 看起来像这样。

    <TreeView Name="ConfigurationFilter">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type models:MyModel}" ItemsSource="{Binding Path=Filters.FilterType1}">
<StackPanel Orientation="Horizontal">
<CheckBox></CheckBox>
<Label Content="{Binding Path=Name}"></Label>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>

我有一个看起来像这样的模型

public class MyModel
{
public Observable<MyFilter> FilterType1 {get;set;}
public Observable<MyFilter> FilterType2 {get;set;}
}

public class MyFilter
{
public string Name {get;set;}
public bool IsSelected {get;set;}
}

在我的 MainWindow.Xaml.cs 中,我有以下内容:

public partial class MainWindow : Window
{
public MyModel Filters { get; set; }
}

FilterType1 属性中有 331 个项目。然而,当我运行该应用程序时,绑定(bind)从未发生。我在 Treeview 中看不到任何项目。我做错了什么?

更新 1

我已按照建议将主窗口添加为 TreeView 和绑定(bind)的数据上下文,但树中仍然没有任何项目

<TreeView Name="ConfigurationFilter" ItemsSource="{Binding Filters}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type models:MyModel}" ItemsSource="{Binding Path=Filters.FilterType1}">
<StackPanel Orientation="Horizontal">
<CheckBox></CheckBox>
<Label Content="{Binding Path=Name}"></Label>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>

和我的 MainWindow.cs

    public MainWindow()
{
InitializeComponent();
ConfigurationFilter.DataContext = this;
}

最佳答案

我能够通过修改我的 treeview 以绑定(bind)到复合 View 模型来实现此功能,如所演示的 on CodeProject .

    <TreeView Grid.ColumnSpan="2" Grid.RowSpan="2">
<TreeViewItem Header="Routes" Name="RouteView" ItemsSource="{Binding Routes}">
<TreeViewItem.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type viewModels:RouteViewModel}" ItemsSource="{Binding}">
<StackPanel Orientation="Horizontal">
<Label Content="{Binding Path=Name}" VerticalAlignment="Center"></Label>
</StackPanel>
</HierarchicalDataTemplate>
</TreeViewItem.ItemTemplate>
</TreeViewItem>
</TreeView>

由于我的 TreeView 将具有多个预先确定的根节点,因此我必须将数据源绑定(bind)到每个根 TreeViewItem。然后我将我的对象放入复合 View 模型中。

复合 View 模型

public class DomainViewModel
{
public ReadOnlyCollection<RouteViewModel> Routes { get; set; }
public ReadOnlyCollection<SkyViewModel> SkyLines { get; set; }

public DomainViewModel(List<Route> routes)
{
Routes = new ReadOnlyCollection<RouteViewModel>(
(from route in routes
select new RouteViewModel(route))
.ToList<RouteViewModel>());
}

Skylines = new ReadOnlyCollection<SkyViewModel>(
(from route in routes
select new SkyViewModel(route))
.ToList<SkyViewModel>());
}
}

ViewModel - 仅显示 1 个以提高可读性。

public class RouteViewModel : INotifyPropertyChanged
{
private Route _route; // My actual database model.

public string Name
{
get { return _route.RouteName; }
}

public RouteViewModel(Route route)
{
_route = route;
}
}

主窗口

    public MainWindow()
{
InitializeComponent();

this.DomainFilterTreeView.DataContext = new this.Domains;
}

关于c# - 绑定(bind)到 WPF 中的 TreeView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21589367/

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