gpt4 book ai didi

c# - 在 Silverlight 中显示与复选框关联的分层数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:16 25 4
gpt4 key购买 nike

您好,在此先感谢您的帮助,我有一个父对象列表,其中每个父对象都有一个子对象列表。我想以用户可以选择子对象的方式显示数据,按下按钮,然后我将通过使用 xml 序列化程序对对象进行序列化,将选定的子对象及其父对象保存在 xml 中。显示应该是什么样子的想法是:

<sdk:Label x:Name="ParentLabel" content="ParentNameString" />
<CheckBox x:Name="ChildCheckBox1" Content="ChildNameString" />
<CheckBox x:Name="ChildCheckBox2" Content="ChildNameString" />
<CheckBox x:Name="ChildCheckBox3" Content="ChildNameString" />
<sdk:Label x:Name="ParentLabel2" content="ParentNameString" />
<CheckBox x:Name="ChildCheckBox4" Content="ChildNameString" />
<CheckBox x:Name="ChildCheckBox5" Content="ChildNameString" />
<CheckBox x:Name="ChildCheckBox6" Content="ChildNameString" />

我知道 DataGrid 控件中有一个复选框列的选项,但我是否能够通过 Header/children 在那里显示层次关系?或者在列表框控件中是否有一个允许标题和相关子元素的数据模板选项?你会推荐什么?再次感谢您的帮助。

最佳答案

如果您只有一个级别的ParentChild,您可以这样做。

带有一些示例数据的简单代码隐藏

namespace SilverlightApplication2
{
public partial class MainPage : UserControl
{
public ObservableCollection<Parent> ParentList { get; set; }

public MainPage()
{
Populate();
InitializeComponent();
}

private void Save_Click(object sender, RoutedEventArgs e)
{
foreach (var child in ParentList
.SelectMany(p => p.Children)
.Where(c => c.IsSelected))
{
//Save the child
Debug.WriteLine(string.Format("Child {0} saved", child.Name));
}
}

private void Populate()
{
ParentList = new ObservableCollection<Parent>();
ParentList.Add(new Parent
{
Name = "John",
Children = new List<Child> { new Child { Name = "Paul" }, new Child { Name = "Pat" } }
});

ParentList.Add(new Parent
{
Name = "Mike",
Children = new List<Child> { new Child { Name = "Bob" }, new Child { Name = "Alice" } }
});

ParentList.Add(new Parent
{
Name = "Smith",
Children = new List<Child> { new Child { Name = "Ryan" }, new Child { Name = "Sue" }, new Child { Name = "Liz" } }
});
}
}

public class Parent
{
public string Name { get; set; }
public List<Child> Children { get; set; }
}

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

你的 xaml 应该是这样的。

<UserControl x:Class="SilverlightApplication2.MainPage"
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:my="clr-namespace:SilverlightApplication2"
x:Name="MainUserControl"
Width="400"
Height="300"
mc:Ignorable="d">
<UserControl.Resources>
<DataTemplate x:Key="ChildTemplate">
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"/>
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ParentTemplate">
<StackPanel>
<TextBlock Text="{Binding Name}" />
<ListBox ItemsSource="{Binding Path=Children}" ItemTemplate="{StaticResource ChildTemplate}"/>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<StackPanel x:Name="LayoutRoot" Background="White">
<ListBox ItemsSource="{Binding ElementName=MainUserControl, Path=ParentList}" ItemTemplate="{StaticResource ParentTemplate}"/>
</StackPanel>
</UserControl>

这会产生这样的 View 。为了简单起见,我省略了所有样式,我相信你可以让它更性感 ;)

enter image description here

现在您可以在代码后面只处理 IsSelected 为 true 的 Child

如果您有多个级别...即..您的 child 有 child ,您将不得不使用HierarchicalDataTemplate

关于c# - 在 Silverlight 中显示与复选框关联的分层数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075011/

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