当前位置: 首页 > 知识库问答 >
问题:

选择

苏乐
2023-03-14

我在xaml中创建了一个树景。

<TreeView Name="exportTreeView" ItemsSource="{Binding}" Width="350" >
<TreeView.Resources>
    <DataTemplate x:Key="layersTemplate">
        <StackPanel Orientation="Horizontal" Margin="10,0,0,0">
            <CheckBox Foreground="White" IsChecked="{Binding IsToBeExported}" VerticalAlignment="Center" />
            <Label Style="{StaticResource baseStyle}" Content="{Binding Path=Name}" VerticalAlignment="Center" />
        </StackPanel>
    </DataTemplate>
    <HierarchicalDataTemplate x:Key="objectTemplate" ItemsSource="{Binding Path=LayersList}" ItemTemplate="{StaticResource ResourceKey=layersTemplate}">
        <StackPanel Orientation="Horizontal" Height="15" Margin="10,0,0,0">
            <CheckBox Foreground="White" IsChecked="{Binding IsToBeExported}" VerticalAlignment="Center" />
            <Label Style="{StaticResource baseStyle}" Content="{Binding Path=Name}" VerticalAlignment="Center" />
        </StackPanel>
    </HierarchicalDataTemplate>
</TreeView.Resources>
<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=ObjectList}" ItemTemplate="{StaticResource ResourceKey=objectTemplate}">
        <StackPanel Orientation="Horizontal" Margin="10,0,0,0">
            <CheckBox Foreground="White" IsChecked="{Binding IsToBeExported}" VerticalAlignment="Center" />
            <Label Style="{StaticResource baseStyle}" Content="{Binding Path=Name}" VerticalAlignment="Center" />
        </StackPanel>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

树结构如下图所示。每个家长可以有任意数量的孩子

Parent
  -Child
    --Grandchild

我有所有级别的复选框。我不知道如何单独访问它的节点,也不知道如何使用树数据。

在我的VM类中,我将TreeView的datacontext设置为3类列表,如下所示:

public class MProject
{
    public string Name { get; set; }
    public bool IsToBeExported { get; set; }
    public List<MWorkObject> ObjectList { get; set; }
}

public class MWorkObject
{
    public string Name { get; set; }
    public bool IsToBeExported { get; set; }
    public List<MLayer> LayersList { get; set; }
}

public class MLayer
{
    public string Name { get; set; }
    public bool IsToBeExported { get; set; }
}

我的要求是:

  1. 选择父项应选择其所有子项和孙子项
  2. 如何在代码中标识所选的项目?需要它做进一步的处理

请帮忙。

共有1个答案

强才捷
2023-03-14

您需要为类实现INotifyPropertyChanged。然后

  1. 在MProject中导出IsToBeExported的setter中处理所有子项(将IsToBeExported设置为您需要的内容)。绑定使更改在树中可见

例子:

public class ViewBase :INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(string info)
    {       
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
    }
}

public class MProject : ViewBase
{
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (value != _name)
            {
                _name = value;
                NotifyPropertyChanged(nameof(Name));
            }
        }
    }
    private string _name;

    ...
}
 类似资料:
  • 我希望,如果我选择“mammals”,动物选择选项只显示值为1的选项data-animal_class。 我知道如何获得哺乳动物值,但我不知道如何使用过滤器 这是我的代码:

  • 问题内容: 我想设置一个先前选择的要在页面加载时显示的选项。我用以下代码尝试了它: 与 但这是行不通的。有任何想法吗? 问题答案: 这绝对应该工作。确保已将代码放入:

  • 我想调用一个函数时,选择的任何选项。类似于这样: 但不知何故不起作用。有人能帮忙吗。 请注意 我不想捕获更改事件,如果我选择已经选择选项,则不会触发更改事件

  • 问题内容: 如果我只需要2/3列,而是查询而不是在select查询中提供这些列,那么关于更多/更少I / O或内存的性能是否会有所下降? 如果我确实选择了*,则可能会出现网络开销。 但是在选择操作中,数据库引擎是否总是从磁盘中提取原子元组,还是仅提取在选择操作中请求的那些列? 如果它总是拉一个元组,则I / O开销是相同的。 同时,如果它拉出一个元组,从元组中剥离请求的列可能会占用内存。 因此,在

  • 问题内容: 在Python,Java和其他几种硒绑定中,在HTML结构(class)上有一个非常方便的抽象。 例如,假设有以下标记: 这是我们如何在Python中操作它的方法: 换句话说,这是一个 非常透明且易于使用的抽象 。 可以类似的方式 在量角器* 中操纵标签吗? * 这与下拉式量角器e2e测试中的“如何选择选项”或量角器测试中的“选择”框中的如何单击选项不是重复的?。 问题答案: 在量角器

  • 在Python、Java和其他几个selenium绑定中,对

  • 下列选项是根据在第一步选择的文件格式而有所不同。 包含列的标题 如果勾选了这个选项,字段名将会包含在导出的文件。 如果零,留空白 如果字段内容是 0,留空白。 追加 将记录追加至现有的文件。 遇到错误时继续 在导出进程中忽略遇到的错误。 在 XML 中使用属性格式 属性格式 <RECORDS> <RECORD OrderNo="1003" ItemNo="1" PartNo="1313" Qty=

  • 下列选项是根据在第一步选择的文件格式而有所不同。 包含列的标题 如果勾选了这个选项,字段名将会包含在导出的文件。 如果零,留空白 如果字段内容是 0,留空白。 追加到输出文件 将记录追加至现有的文件。 遇到错误时继续 在导出进程中忽略遇到的错误。 记录分隔符、字段分隔符、文本标识符号 指定记录的分隔符号、字段的分隔符号和用于括住文本值的字符。 日期排序、日期分隔符 指定日期的格式和日期的分隔符。