项目控件 - 基于属性的不同子项
本文关键字:属性 控件 于属性 项目 | 更新日期: 2023-09-27 17:56:48
如何根据子项的属性更改ItemsControl
子项?
目前我有这个ItemsControl
:
<ItemsControl ItemsSource="{Binding FooBar}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox Text="{Binding FirstName}" Grid.Column="0"/>
<TextBox Text="{Binding LastName}" Grid.Column="1"/>
<TextBox Text="{Binding Age}" Grid.Column="2"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
此ItemsControl
绑定到一个名为 FooBar
的ObservableCollection
。ObservableCollection
中的每个对象都具有相同的属性。4 个属性中的 3 个绑定到ItemsControl
。foruth 属性称为 deletable
类型为 bool
。现在我想检查此属性。如果deletable == true
,我想看看其他ItemsControl.ItemTemplate
。
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
//...
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
如何根据属性在两个ItemsControl.ItemTemplate
之间切换 - 绑定到OberservableCollection
?
您
需要做的就是根据您的可删除属性显示/隐藏"删除"按钮。
尝试这些行很长的内容:
<ItemsControl ItemsSource="{Binding FooBar}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Text="{Binding FirstName}" Grid.Column="0"/>
<TextBox Text="{Binding LastName}" Grid.Column="1"/>
<TextBox Text="{Binding Age}" Grid.Column="2"/>
<Button Content="X" Grid.Column="3" Command="{Binding YOURDELETECOMMAND}"
Visibility="{Binding Deletable, Converter={StaticConverter BooleanToVisibilityConverter}}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
请注意,您还需要在资源中使用以下声明
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
替代删除命令方法
上面的命令绑定将期望在您的 FooBar 类上定义 YOURDELETECOMMAND,如果您希望在更高的位置处理删除(我将在这里假设 MVVM)。正如Jai在评论中所说,这是一种推荐的方法,因为您可以直接访问您的ObservableCollection
并删除有问题的项目。
<Button Content="X" Grid.Column="3" Command="{Binding DataContext.YOURDELETECOMMAND, RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type vw:YOURVIEW}}}"
Visibility="{Binding Deletable, Converter={StaticConverter BooleanToVisibilityConverter}}"/>
请注意,您将需要在 Xaml 的根目录中使用此声明。
xmlns:vw="NAMESPACE_OF_YOUR_VIEW"