WPF ListBoxItem绑定自己在ListBox中的顺序

案例,一个ListBox绑定后台实体链表:

界面显示三个模块,自定义模板实现:

顺序一般来说在C#的链表里从0开始,我这里想让其从1开始,使用了这种方法,可以传递顺序到后台命令。

复制代码
 <ListBox
     ItemContainerStyle="{StaticResource ActionItemStyle}"
     ItemsSource="{Binding OverallActions}"
     ScrollViewer.HorizontalScrollBarVisibility="Disabled">

     <ListBox.ItemTemplate>
         <DataTemplate>
             <Border
                 Margin="3"
                 BorderThickness="1"
                 CornerRadius="5">
                 <Grid>
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="*" />
                         <ColumnDefinition Width="Auto" />
                         <ColumnDefinition Width="Auto" />
                     </Grid.ColumnDefinitions>

                     <!--  显示配置信息  -->
                     <StackPanel Grid.Column="0" Margin="10">
                         <TextBlock
                             FontSize="14"
                             FontWeight="Bold"
                             Text="{Binding ActionDescription}" />

                     </StackPanel>

                     <!--  索引显示  -->
                     <TextBlock
                         Grid.Column="1"
                         Margin="10"
                         HorizontalAlignment="Center"
                         VerticalAlignment="Center"
                         FontSize="16"
                         FontWeight="Bold"
                         Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Converter={StaticResource IndexConverter}}" />

                     <!--  操作按钮  -->
                     <StackPanel
                         Grid.Column="2"
                         Margin="10"
                         Orientation="Horizontal">
                         <!--  主操作按钮  -->
                         <Button
                             Width="60"
                             Height="30"
                             Margin="0,0,5,0"
                             Command="{Binding DataContext.ExecuteActionHandleModelCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"
                             CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Converter={StaticResource IndexConverter}}"
                             Content="执行" />
                     </StackPanel>
                 </Grid>
             </Border>
         </DataTemplate>
     </ListBox.ItemTemplate>
 </ListBox>

传递参数:

XML 复制代码
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Converter={StaticResource IndexConverter}}"

绑定索引的转换器:

cs 复制代码
 public class ItemToIndexConverter : IValueConverter
 {
     // 单值转换(用于ListBoxItem/DataGridRow获取索引)
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
     {
         if (value is ListBoxItem listBoxItem)
         {
             var listBox = ItemsControl.ItemsControlFromItemContainer(listBoxItem);
             if (listBox != null)
             {
                 int index = listBox.ItemContainerGenerator.IndexFromContainer(listBoxItem);
                 return index >= 0 ? (index + 1).ToString() : "N/A";
             }
         }
         else if (value is DataGridRow dataGridRow)
         {
             var dataGrid = ItemsControl.ItemsControlFromItemContainer(dataGridRow);
             if (dataGrid != null)
             {
                 int index = dataGrid.ItemContainerGenerator.IndexFromContainer(dataGridRow);
                 return index >= 0 ? (index + 1).ToString() : "N/A";
             }
         }

         return "N/A";
     }

    

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
     {
         throw new NotImplementedException();
     }

    
 }
相关推荐
FuckPatience9 小时前
WPF GridView 列绑定时前端没有属性提示
wpf
界面开发小八哥15 小时前
界面控件DevExpress WPF v26.1新版亮点 - 模板工具包 & MVVM功能全新升级
wpf·界面控件·devexpress·ui开发·.net 10
记忆停留w3 天前
Celery+Redis 分布式异步任务队列工程落地业务逻辑
大数据·人工智能·redis·分布式·缓存·架构·wpf
雪靡3 天前
WPF PerMonitorV2 下的跨窗口问题
c#·wpf
listening7774 天前
HarmonyOS 6.1 分布式文件服务实战:跨设备商品图片/视频秒开方案
wpf·harmonyos
Macbethad4 天前
基于WPF的半导体设备EAP控制程序架构设计与实现
wpf
国服第二切图仔4 天前
HarmonyOS APP《画伴梦工厂》开发第60篇-分布式软总线2.0——多设备协同新范式
分布式·wpf·harmonyos
精神底层5 天前
拒绝 UI 卡死!我用 CSnakes 实时拦截 Python 训练流,在 WPF 中重构了 ScottPlot 5 高性能 AI 看板
python·ui·wpf
爱吃大芒果5 天前
不用多设备模拟器跑通 ShareKit 碰一碰分享
华为·wpf·harmonyos
贪玩的小松鼠6 天前
WPF基础到企业应用系列7——深入剖析依赖属性(WPF/Silverlight核
wpf