我做了一個投籃的應用程序來舉例說明我的問題:束縛樹狀部分清爽
繼承人的window1.xaml
<Window
x:Class="TreeViewStepByStep.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Width="400"
Height="600">
<Window.Resources />
<Grid>
<TreeView
Margin="0,21,0,0"
ItemsSource="{Binding Regions}"
HorizontalAlignment="Left"
Width="221">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate
ItemsSource="{Binding Type}">
<TextBlock
Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate
ItemsSource="{Binding Locations}">
<TextBlock
Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock
Text="{Binding}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<Button
Content="Populate"
Height="23"
HorizontalAlignment="Left"
Margin="227,21,0,0"
Name="button2"
VerticalAlignment="Top"
Width="96"
Click="button2_Click" />
<Button
Content="Add child"
Height="23"
HorizontalAlignment="Left"
Margin="227,49,0,0"
Name="button3"
VerticalAlignment="Top"
Width="96"
Click="button3_Click" />
<Button
Content="Modify"
Height="23"
HorizontalAlignment="Left"
Margin="227,106,0,0"
Name="button4"
VerticalAlignment="Top"
Width="96"
Click="button4_Click" />
<Button
Content="Add root level"
Height="23"
HorizontalAlignment="Left"
Margin="227,135,0,0"
Name="button5"
VerticalAlignment="Top"
Width="96"
Click="button5_Click" />
</Grid>
</Window>
而這裏的window1.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
namespace TreeViewStepByStep
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
Collection<Region> regions;
public Window1()
{
InitializeComponent();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
Region sms = new Region("São Mateus do Sul")
{
Type =
{
new Types("Placemarks")
{
Locations =
{
"Pine trees",
"Barn",
"Phantom city"
}
},
new Types("Planning")
{
Locations =
{
"Geada",
"Por do sol"
}
},
}
};
Region others = new Region("Outros")
{
Type =
{
new Types("Placemarks")
{
Locations =
{
"Road",
"Waterfall"
}
},
new Types("Planning")
{
Locations =
{
"Moon"
}
},
}
};
regions = new Collection<Region>() { sms, others };
DataContext = new
{
Regions = regions
};
}
private void button3_Click(object sender, RoutedEventArgs e)
{
this.regions[1].Type.Add(new Types("New folder")
{
Locations =
{
"Test"
}
}
);
}
private void button4_Click(object sender, RoutedEventArgs e)
{
this.regions[0].Name = "Edited";
}
private void button5_Click(object sender, RoutedEventArgs e)
{
this.regions.Add(new Region("My new region"));
}
}
public class Region
{
public Region(string name)
{
Name = name;
Type = new ObservableCollection<Types>();
}
public string Name { get; set; }
public ObservableCollection<Types> Type { get; set; }
}
public class Types
{
public Types(string name)
{
Name = name;
Locations = new ObservableCollection<string>();
}
public string Name { get; private set; }
public ObservableCollection<string> Locations { get; set; }
}
}
我TreeView
綁定到分層模型(區域變量)。當我點擊「填充」時,它將TreeView
綁定到這個變量。當我點擊「添加孩子」時,它將一個子元素添加到綁定變量,並反映在TreeView
上。到現在爲止還挺好。
當我嘗試修改現有元素的名稱或嘗試添加根級別節點(「修改」和「添加根級別」按鈕)時,會出現問題。這些修改是否也應該反映在TreeView
上,因爲它是綁定到集合的?
這解決了創作的問題,但不能編輯之一。爲了自動反映節點上的編輯,我必須實現pchajer的解決方案。非常感謝你們兩位。 – RBasniak