0
子ノードを含む親ノードを持つツリービューが表示されました。私は子ノードを選択しており、それぞれの親ノードを折りたたむ際には選択が維持されません。ツリービューを折りたたむと、選択項目が維持されません。
XAML:
<Grid>
<TreeView Name="trvPersons" SelectedItemChanged="trvPersons_SelectedItemChanged">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Margin="0,0,4,0" x:Name="txt"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding IsChecked}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</Grid>
コードの後ろ:
あなたが崩壊の親ノードをクリックすると、選択した項目は、親ノードに変更され、基本的にWPFのツリービューでpublic partial class MainWindow : Window
{
public static List<Person> persons = new List<Person>();
public MainWindow()
{
InitializeComponent();
Person person1 = new Person() { Name = "John Doe", uniqueName="1", Age = 42 };
person1.Children.Add(new Person() { Name = "Sammy Doe", uniqueName = "2", parentUniqueName = "1", Age = 13 });
Person person2 = new Person() { Name = "Jane Doe", uniqueName = "3", Age = 39 };
person2.Children.Add(new Person() { Name = "Jenny Moe\\", uniqueName = "4", parentUniqueName = "3", Age = 17 });
person2.Children.Add(new Person() { Name = "Jenny Moe", uniqueName = "5", parentUniqueName = "3", Age = 17 });
Person person3 = new Person() { Name = "Becky Toe", uniqueName = "6", Age = 25 };
person3.Children.Add(new Person() { Name = "Jenny Moe", uniqueName = "7", parentUniqueName = "6", Age = 17 });
persons.Add(person1);
persons.Add(person2);
persons.Add(person3);
trvPersons.ItemsSource = persons;
}
private void trvPersons_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
}
public class Person : INotifyPropertyChanged
{
public List<Person> Children { get; set; }
public string uniqueName { get; set; }
public string parentUniqueName { get; set; }
public Person()
{
this.Children = new List<Person>();
}
public string Name { get; set; }
public int Age { get; set; }
private bool isChecked;
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public bool IsChecked
{
get { return this.isChecked; }
set
{
this.isChecked = value;
if (value && !string.IsNullOrEmpty(this.parentUniqueName))
{
persons.ForEach(i => i.IsChecked = false);
var p = MainWindow.persons.FirstOrDefault(i => i.uniqueName == this.parentUniqueName);
if (p != null)
{
p.IsChecked = true;
}
}
OnPropertyChanged("IsChecked");
}
}
}
}
が提供ウルチェックされたコード私は、これまでは問題を確認することしかできません –
コードなしで問題が何であるかを知るのは難しいです。 – RasmusW
サンプルコードを見つける - Doe – Doe