功能的逻辑帮助在列表视图中上下移动

时间:2014-09-03 08:33:42

标签: c# wpf wpf-controls servicemanager

我正在使用poco类进行以下屏幕,但我只想知道如何实现此屏幕的上下移动元素enter image description here

我正在使用ObservableCollection将我的项目添加到共同列表中我的问题是如何实现向上移动和向下移动。我不需要实时更改poco类但不确定如何实现这个

   private void AddColumn(object sender, RoutedEventArgs e)
    {

        if (this.WizardData == null)
            return;

        if (this.WizardData.ConcreteCustomColumnsProxy == null)
            this.WizardData.ConcreteCustomColumnsProxy = new ObservableCollection<CustomColumnsModel>();

        this.WizardData.ConcreteCustomColumnsProxy.Add(new CustomColumnsModel() { CustomColumnsDisplayName = txtDsiplayName.Text
            , CustomColumnsOrder = 1, CustomColumnsWidth = Convert.ToInt32(txtWdith.Text) });

        this.listView1.ItemsSource = this.WizardData.ConcreteCustomColumnsProxy;
        this.listView1.UnselectAll();

        this.listView1.Items.Refresh();

我的Poco课程如下

 public event PropertyChangedEventHandler PropertyChanged;
    public const string IdPropertyName = "CustomColumnsID";
    private Guid _Id = Guid.Empty;
    public Guid CustomColumnsID
    {
        get { return _Id; }
        set
        {
            if (_Id == value)
                return;
            _Id = value;
            NotifyPropertyChanged(IdPropertyName);
        }
    }


    public string CustomColumnsDisplayName { get; set; }
    public int CustomColumnsWidth { get; set; }
    public int CustomColumnsOrder { get; set; }  


    protected void NotifyPropertyChanged(string key)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(key));
        }
    }

    public EnterpriseManagementObject ActualData { get; private set; }

}

1 个答案:

答案 0 :(得分:4)

你有某种DataGrid控件。您需要将集合属性数据绑定到DataGrid.ItemsSource属性,并将与集合中项目相同类型的属性绑定到DataGrid.SelectedItems属性:

<DataGrid ItemsSource="{Binding YourCollectionProperty}" 
    SelectedItem="{Binding YourItemProperty}" />

DataGrid.SelectedItems属性数据绑定到YourItemProperty,您可以通过设置此属性来设置在UI中选择的项目。因此,要将所选项目向下移动一个位置,您可以执行以下操作:

int selectedIndex = YourCollectionProperty.IndexOf(YourItemProperty);
if (YourCollectionProperty.Count > selectedIndex) 
    YourItemProperty = YourCollectionProperty.ElementAt(selectedIndex + 1);

这就是您执行“向下移动”Button的操作的方式,而“向上移动”Button的工作方式类似。然后,您需要做的就是连接一些ClickICommand事件处理程序。