wpf listbox 选中项 上移下移

原文: wpf listbox 选中项 上移下移


private void MoveUp_Click(object sender, RoutedEventArgs e)

        {
            DataRowView rowView = this.listScrip.SelectedItem as DataRowView;
            if (rowView == null)
            {
                return;
            }


            DataRow selRow = rowView.Row;
            int index = dtScrip.Rows.IndexOf(selRow);
            if (index == 0)
            {
                return;
            }


            DataRow newRow = dtScrip.NewRow();
            newRow.ItemArray = dtScrip.Rows[index].ItemArray;             
            dtScrip.Rows.Remove(selRow);
            dtScrip.Rows.InsertAt(newRow, index - 1);


            this.listScrip.SelectedIndex = index - 1;
        }


        private void MoveDown_Click(object sender, RoutedEventArgs e)
        {
            DataRowView rowView = this.listScrip.SelectedItem as DataRowView;
            if (rowView == null)
            {
                return;
            }
            DataRow selRow = rowView.Row;
            int index = dtScrip.Rows.IndexOf(selRow);
            if (index == dtScrip.Rows.Count - 1)
            {
                return;
            }


            DataRow newRow = dtScrip.NewRow();
            newRow.ItemArray = dtScrip.Rows[index].ItemArray;
            dtScrip.Rows.Remove(selRow);
            dtScrip.Rows.InsertAt(newRow, index + 1);


            this.listScrip.SelectedIndex = index + 1;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF MVVM 中,可以通过使用 `ICommand` 和 `RelayCommand` 来实现 `ListBox` 中的上移下移操作。 以下是一个实现上移下移功能的示例代码: 1. 在视图模型中,创建一个 `ObservableCollection` 来存储列表,并创建两个 `RelayCommand` 分别用于上移下移操作: ``` public class MyViewModel : INotifyPropertyChanged { private ObservableCollection<string> _items = new ObservableCollection<string>(); public ObservableCollection<string> Items { get { return _items; } set { _items = value; OnPropertyChanged(nameof(Items)); } } public ICommand MoveUpCommand { get; set; } public ICommand MoveDownCommand { get; set; } public MyViewModel() { MoveUpCommand = new RelayCommand<object>(MoveUp, CanMoveUp); MoveDownCommand = new RelayCommand<object>(MoveDown, CanMoveDown); } private bool CanMoveUp(object parameter) { var index = Items.IndexOf(parameter as string); return index > 0; } private void MoveUp(object parameter) { var index = Items.IndexOf(parameter as string); var temp = Items[index]; Items[index] = Items[index - 1]; Items[index - 1] = temp; } private bool CanMoveDown(object parameter) { var index = Items.IndexOf(parameter as string); return index >= 0 && index < Items.Count - 1; } private void MoveDown(object parameter) { var index = Items.IndexOf(parameter as string); var temp = Items[index]; Items[index] = Items[index + 1]; Items[index + 1] = temp; } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ``` 2. 在视图中,使用 `ListBox` 来显示列表,并绑定上移下移命令: ``` <ListBox ItemsSource="{Binding Items}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button Content="▲" Command="{Binding DataContext.MoveUpCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}" CommandParameter="{Binding}" /> <Button Content="▼" Command="{Binding DataContext.MoveDownCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}" CommandParameter="{Binding}" /> <TextBlock Text="{Binding}" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> ``` 在上面的示例中,使用了 `RelayCommand` 类来实现命令的绑定。它是一个实现了 `ICommand` 接口的类,可以用于在视图模型中声明和实现命令。在 `ListBox` 的数据模板中,使用了 `RelativeSource` 来绑定 `ListBox` 的父级元素(即视图),以便使用视图模型中的命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值