我有一个带有层次数据模板的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相关的逻辑(例如我提到的混合属性),则必须在模型和视图之间引入视图模型。