【问题标题】:ListBox item template depends on item valuesListBox 项模板取决于项值
【发布时间】:2012-05-05 15:42:28
【问题描述】:

在 WPF、MVVC 应用程序中,我有很正常的列表框:

<ListBox ItemsSource="{Binding Friends}">
</ListBox>

那么列表的每一项使用以下数据模板:

<DataTemplate DataType="{x:Type model:Friend}">
    <Border BorderThickness="1" BorderBrush="Gray" Padding="3" Name="border" Margin="3">
        <StackPanel Grid.Row="1" Grid.Column="2" Orientation="Horizontal">
            <TextBlock Name="DescriptionDTDataType" Text="{Binding Path=ConnectedUserID}" />
            <TextBlock Name="StatusTitle" Margin="8,0,4,0">Status:</TextBlock>
            <TextBlock Name="Status" Text="{Binding Path=Approved}" />
            <Button Content="Approve" Command="{x:Static inf:Commands.ApproveUserConnection}" CommandParameter="{Binding}"></Button>
            <Button Content="Disapprove" Command="{x:Static inf:Commands.DisapproveUserConnection}" CommandParameter="{Binding}"></Button>
        </StackPanel>
    </Border>
</DataTemplate>

问题是...我想隐藏 Friend.Approved 属性的基本按钮之一。例如,如果 Friend.Approved 的值为“approved”,我想隐藏按钮 Approved 并仅显示按钮 Dissaprove。另一方面,如果 Friend.Approved 具有“不赞成”的价值,那么我想要相反。如何做到这一点?

谢谢。

【问题讨论】:

    标签: wpf xaml listbox


    【解决方案1】:

    除了创建 IValueConverter 之外,还有一个使用 DataTriggers 的纯 XAML 解决方案

    只需将其添加到您的 DataTemplate:

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Approved}" Value="approved" >
            <Setter TargetName="Approve" Property="Visibility" Value="Collapsed"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Approved}" Value="disapproved" >
            <Setter TargetName="Disapprove" Property="Visibility" Value="Collapsed"/>
        </DataTrigger>
    </DataTemplate.Triggers>
    

    并为您的按钮命名:

    <Button Name="Approve" Content="Approve" ...></Button>
    <Button Name="Disapprove" Content="Disapprove" ...></Button>
    

    但是,如果您想在多个 DataTemplate 的多个位置重用此隐藏逻辑,最好将 Approved 文本写入 Visibility 转换器。

    【讨论】:

      【解决方案2】:

      将 Buttons Visibility 属性绑定到 Approved 并使用值转换器将 Approved 转换为 Visibility 值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多