2014-09-12 5 views
0

관찰 컬렉션을 사용하여 WPF Listview에 바인딩 된 목록을 저장하고 있습니다. 제 문제는 프론트 엔드 순서를 작동 시키려고한다는 것입니다. Minutes에서 Move up 버튼을 클릭하면 항목이 위로 이동하지만 목록에 이미 채워진 항목은 변경되지 않습니다. 이것은 쉽지만 쉽게 찾을 수 있어야합니다.위로 이동 목록 위와 아래로 이동

내 질문은 사용자가 아래 시퀀스를 기반으로 마우스를 위로 클릭하고 현재 위치에서 새 위치를 반영하도록 목록의 다른 항목을 업데이트 한 후 반영하도록 주문 번호 위치를 올바르게 변경하는 방법입니다. 기존 요소 또는 새로운 추가 요소의 수를 변경하지 않습니다.

Order  Display Name  Width 
    1   Title   50 
    2   Description  150 

나는 새 목록 순서는 다음과 사용

Order  Display Name  Width 
    1   Title   50 
    2   Newitem   50 
    3   Description  150 

코드 메신저를하게되면 내가 위로 이동 버튼을 클릭 버튼을

Order  Display Name  Width 
    1   Title   50 
    2   Description  150 
    3   Newitem   50 

를 추가 사용하여 목록 위에 항목을 추가

ObservableCollection<CustomColumnsModel> columnsList = this.WizardData.ConcreteCustomColumnsProxy; 
    Extensions.MoveItemUp(columnsList, this.listView1.SelectedIndex); 

    int offset = 0; 
    var selectedColumnItem = listView1.SelectedItem as CustomColumnsModel; 

    foreach (CustomColumnsModel item in columnsList) 
    { 

     foreach (CustomColumnsModel item in this.listView1.SelectedItems) 
     { 
      item.CustomColumnsOrder -= 1; 
     }else if (listView1.SelectedItem > item) 
     { 
       item.CustomColumnsOrder +1; 
     } 



    } 

g 내 확장 메서드

public static void MoveItemUp<T>(this ObservableCollection<T> baseCollection, int selectedIndex) 
    { 
     //# Check if move is possible 
     if (selectedIndex <= 0) 
      return; 

     //# Move-Item 
     baseCollection.Move(selectedIndex - 1, selectedIndex); 
    } 

이며,이 제안에 따라 시도 코드를 보여

public class CustomColumnsModel : INotifyPropertyChanged 
{ 
    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; } 

편집 내 POCO 클래스입니다

foreach (CustomColumnsModel item in columnsList) 
    { 

     if (item.CustomColumnsOrder < item.ColumnIndex) 
     item.CustomColumnsOrder -= 1; 
     else if (item.CustomColumnsOrder > item.ColumnIndex) 
     item.CustomColumnsOrder -= 1; 
    } 
+4

그럼 뭐야? – Noctis

+0

@Noctis 위의 질문을 추가하십시오. 죄송합니다. – rogue39nin

답변

0

당신이되어 있어야합니다 것 같아 귀하의 개체에 대한 색인 속성, 그리고 때마다 누군가의 히트 up, 그렇지 않으면 위의 색인 번호와 색인 번호를 교체해야합니다.

가장 낮은 숫자가 아닌 사람이 down이되면 다른 항목으로 다시 스왑합니다.

주문 ID 번호
1. . . 1 . 하나
2. . . 2. 두
3. . . 삼 . 세

은 (당신이 3 일에 띄워 가정)이 될 것이다 :

주문 ID 발
1. . . 1 . 하나
3. . . 2. 두
2. . . 삼 . 세

다음 순서대로 정렬하십시오.


편집 :

// The following will never be smaller than 0 
    if (selectedIndex <= 0) 
     return; 

    // This is not really doing what you want. 
    baseCollection.Move(selectedIndex - 1, selectedIndex); 

당신은 당신의 선택된 인덱스에있는 항목과 동일 var에 item_to_move_up을 갖고 싶어, 당신은 체크 가정 위의 하나 (하나 item_to_move_down 첫 번째가 아닌 논리).
다음으로 주문 값을 교환하십시오. 다음과 같이 입력하십시오 :

var temp_val = item_to_move_up.order; 
item_to_move_up = item_to_move_down.order; 
item_to_move_down = temp_val; 
+0

코드 예제를 제공해 주시면 감사하겠습니다. 올바른 답변으로 표시 할 수 있습니다. – rogue39nin

+0

대답은 정확합니다. 이 사이트는 당신을 돕기위한 것이지 당신을위한 코드를 작성하는 것이 아닙니다 ... – Noctis

+0

아니지만 대부분은 그 임무의 짧은 예를 제공 할 것입니다. 내가 도와 줄 것입니다. – rogue39nin