如何访问WPF TreeView中动态创建的Windows控件(复选框)



我有一个带有层次数据模板的wpf树视图,该模板加载对象并使其恰当地显示它们。在TreeView的孩子中,我使用文本块以及旁边的复选框在树视图中显示对象的"名称"。这是我的代码以供参考:

<DockPanel Name="test1" Margin="10,10,0,10" VerticalAlignment="Stretch" Grid.Row="3" Grid.RowSpan="7" Grid.Column="0">
        <DockPanel.Resources>
            <local:CheckBoxCommand x:Key="cbc"></local:CheckBoxCommand>
            <src:TreeViewFilter x:Key="MyList" />
            <HierarchicalDataTemplate DataType="{x:Type src:TreeViewParent}" ItemsSource="{Binding Path=OrderAttributes}">
                <TextBlock Text="{Binding Path=NameAndCount}" FontSize="24"/>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate DataType="{x:Type src:OrderAttribute}" ItemsSource="{Binding Path=OrderAttributes}">
                <StackPanel Name="test" Orientation="Horizontal" VerticalAlignment="Center">
                    <CheckBox Command="{StaticResource cbc}"
                              CommandParameter="{Binding Path=NameAndParent}" Visibility="{Binding Path=CheckBoxVisible}" VerticalAlignment="Center">
                    </CheckBox>
                    <TextBlock Text="{Binding Path=NameAndCount}" FontSize="16"/>
                    </StackPanel>
            </HierarchicalDataTemplate>
        </DockPanel.Resources>
        <TreeView Name="treeView1" BorderThickness="2" ItemsSource="{Binding Source={StaticResource MyList}, UpdateSourceTrigger=PropertyChanged}" TreeViewItem.Selected="filterByBatchStatus"/>
    </DockPanel>

当用户在树上检查复选框时,我的应用程序中的某些内容基于检查了哪个复选框。我知道要检查哪个复选框的方式是通过命令传递paramater,该参数绑定到对象的" nameandparent"。所有这些都可以。

当我给用户提供保存已检查哪些复选框的选项时,我的问题就开始了,我将检查框旁边每个对象的"名称"保存到XML中。如您所见,我只保存对象的"名称",但是此名称没有挂钩的复选框,因此我无法返回并"查找"关联的复选框。

当我为用户提供加载这些保存文件之一的选项时,我想穿越树并选中保存的框。问题是复选框没有名称或UID,我不能通过绑定来分配它们,因为不允许使用。

无论如何是否有遍历树视图,并以某种方式将保存的名称与树中每个元素的名称进行比较,然后检查该特定的复选框,还是必须以不同的方式对其进行编程?<<<</p>

只需在包含您的数据的类中创建一个布尔值,并将其绑定到复选框。您不必操纵视图,而是可以更轻松地操纵其绑定的数据,消除对视觉树木操作的需求,并消除应用程序逻辑和UI之间的依赖关系。这是模型视图模型模式的最重要实现。

如果您不想在数据模型中介绍与UI相关的逻辑(例如我提到的混合属性),则必须在模型和视图之间引入视图模型。

相关内容

  • 没有找到相关文章

最新更新