项目控件 - 基于属性的不同子项

本文关键字:属性 控件 于属性 项目 | 更新日期: 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绑定到一个名为 FooBarObservableCollectionObservableCollection中的每个对象都具有相同的属性。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"