WPF中listview动态控制按钮显示

初次接触WPF记录一下这个麻烦了我比较久的问题,哈哈

先上xaml代码

<ListView  x:Name="ListView1" Grid.Row="1" Grid.Column="1" Grid.IsSharedSizeScope="True" ItemsSource="{Binding SingelDrivewayProbs}" ItemContainerStyle="{StaticResource YKListViewItem}" Margin="10,0,0,0">
            <ListView.View>
                <GridView x:Name="probList">
                    <GridViewColumn Header="问题描述" Width="200" DisplayMemberBinding="{Binding ProbDesc}"/>
                    <GridViewColumn Header="操作" Width="150">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal" Margin="0 -7">
                                    <Button Visibility="{Binding pdBtn_Visible}" Name="pdBtn" Content="派单" Style="{StaticResource MaterialDesignFlatButton}" />
                                    <Button Visibility="{Binding jkBtn_Visible}" Name="jkBtn" Content="查看监控" Style="{StaticResource MaterialDesignFlatButton}"/>
                                    <Button Visibility="{Binding cqBtn_Visible}" Name="cqBtn" Content="重启" Style="{StaticResource MaterialDesignFlatButton}"/>
                                </StackPanel>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>

给Visibility属性绑定列表属性,后台根据自己的逻辑修改对应的枚举值即可

下面是我定义的属性

最后再上vm对应的代码:

对接口返回的数据根据自己业务逻辑判断

                    foreach (var item in expApiResult.Result.Data)
                    {
                        var it = new DrivewayProbItem
                        { 
                            DrivewayId = item.CrossingId, 
                            ProbDesc = item.DeviceDescribe,
                            cqBtn_Visible = item.DeviceDescribe.Contains("地感异常") || item.DeviceDescribe.Contains("一体机") ? Visibility.Visible : Visibility.Collapsed,
                            jkBtn_Visible = item.DeviceDescribe.Contains("地感异常") ? Visibility.Visible : Visibility.Collapsed,
                            pdBtn_Visible = item.DeviceDescribe.Contains("数据同步") ? Visibility.Visible : Visibility.Collapsed ,
                        };
                        //将问题明细写入单独的集合存放
                        if (Probs.Where(s=>s.DrivewayId == item.CrossingId && s.ProbDesc == item.DeviceDescribe).ToList().Count == 0)
                        {
                            Probs.Add(it);
                        }
                        //将相同道口id的异常信息合并:
                        //如果集合已经存在了这道口信息,则直接添加异常信息,否则新增一条数据
                        var device = list.Find(x => x.CrossingId == item.CrossingId);
                        if (list.FindAll(s=>s.CrossingId == item.CrossingId).Count() > 0 && device != null)
                        {
                            device.DeviceName += ","+item.DeviceName;
                        }
                        else
                        {
                            list.Add(item);
                        }
                    }

加更一下,还有一种办法哈哈哈

1、通过给样式添加触发器,绑定条件值

        <Style x:Key="SyncButtonStyle" TargetType="Button" BasedOn="{StaticResource MaterialDesignFlatMidBgButton}">
            <Setter Property="Margin" Value="0 -8" />
            <Setter Property="Padding" Value="8" />
            <Setter Property="Visibility" Value="Collapsed" />
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding DeviceName}" Value="数据同步" />
                        <Condition Binding="{Binding DeviceState}" Value="WARNING" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Visibility" Value="Visible" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>

2、引用样式即可

<ListView ItemsSource="{Binding Source}" Grid.IsSharedSizeScope="True" ItemContainerStyle="{StaticResource YKListViewItem}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="物业" DisplayMemberBinding="{Binding PropertyName}"/>
                    <GridViewColumn Header="小区" DisplayMemberBinding="{Binding CommunityName}"/>
                    <GridViewColumn Header="停车场" DisplayMemberBinding="{Binding ParkName}"/>
                    <GridViewColumn Header="道口" DisplayMemberBinding="{Binding CrossingAlias}"/>
                    <GridViewColumn Header="设备" DisplayMemberBinding="{Binding DeviceName}"/>
                    <GridViewColumn Header="状态" DisplayMemberBinding="{Binding DeviceState}"/>
                    <GridViewColumn Header="说明" DisplayMemberBinding="{Binding DeviceDescribe}"/>
                    <GridViewColumn Header="操作" CellTemplate="{StaticResource OperationCellTemplate}" />
                </GridView>
            </ListView.View>
        </ListView>

我认为还是第二种方式比较科学,希望还有办法的大佬可以补充一下哈哈

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值