2012-06-08 6 views
0

ListViewItem에서 ListView.SelectedListViewItemCollection 개체를 만들고 싶습니다.ListViewItem을 ListView.SelectedListViewItemCollection으로 변환하려면 어떻게해야합니까?

public ListView.SelectedListViewItemCollection getSelectedListViewItemCollection(ListViewItem myListViewItem) 
{ 
    ListView myListView = new ListView(); 
    ListViewItem listViewItem = (ListViewItem)myListViewItem.Clone(); 
    listViewItem.Selected = true; 
    myListView.Items.Add(listViewItem); 
    return new ListView.SelectedListViewItemCollection(myListView); 
} 

그러나 빈 목록이 반환됩니다 그건 내 방식입니다. (목록에 주어진 listViewItem이 포함되어 있다고 가정) 내 접근 방식에 문제가 있습니까?

+0

좀 더 넓은 그림을 줄 수 있습니까? 여기서 귀환 가치로 무엇을하려합니까? 나는 당신이하고자하는 것이 무엇이든 달성하기위한 더 좋은 방법이 있다고 의심합니다. – Crisfole

+0

대신'IEnumerable '을 반환해야합니다. – SLaks

+0

절대로 시도하지 않았지만 복제가 문제라고 말했을 것입니다. 선택한 항목은 선택한 항목이 맞아야합니다. –

답변

0

SelectedListViewItemCollection은 Selected 속성이 true 인 ListViewItem이있는 ListView의 래퍼입니다. 그러나 ListView가 제대로 작동하려면 표시되어야합니다.

원하는 경우 화면에서 선택되지 않은 ListView 항목 모음을 사용하면 SelectedListViewItemCollection을 사용하지 않아야합니다.

+0

고마워, 다시 내 접근 방식을 다시 생각해 보겠다. – David

0

ListView 컨트롤의 단일 항목 인 에서 ListView.SelectedListViewItemCollection 인 목록 (또는 컬렉션)을 가져 오는 이유가 확실하지 않습니까? 당신이 역함수를 원했던 것처럼 보입니다. 이것은 ListView.SelectedListViewItemCollection에서 선택된 항목의 목록을 얻는 것입니다. 그 맞습니까? 그렇다면, 당신은 그것을 달성 할 수있는 한 가지 방법이 있습니다.

는 당신이 User 개체의 목록을 감안할 때, 당신의 목록보기는 다음과 같이 작성 될 수있다 :

userListUser 개체의 형식화 된 목록입니다
listview.BeginUpdate(); 
foreach (User u in userList) 
{ 
    ListViewItem item = new ListViewItem() { Text = u.Name, Tag = u}; 
    listview.Items.Add(item); 
} 
listview.EndUpdate(); 

, 즉 List<User>가. 당신은 다음의 ListView에서 선택한 항목을 얻을 수 있습니다 :

ListViewItem[] collection = GetSelectedItems(listview); 

List<string> names = new List<string>(); 
Parallel.ForEach(collection, item => 
{ 
    User u = item.Tag as User; 
    names.Add(u.Name); 
}); 

private static ListViewItem[] GetSelectedItems(ListView listView) 
{ 
    ListViewItem[] selectedItems = new ListViewItem[0]; 

    MethodInvoker miGetSelectedItems = delegate 
    { 
     selectedItems = new ListViewItem[listview.SelectedItems.Count]; 
     listview.SelectedItems.CopyTo(selectedItems, 0); 
    }; 

    if (listview.InvokeRequired) 
    { 
     listview.Invoke(miGetSelectedItems); 
    } 
    else 
    { 
     miGetSelectedItems(); 
    } 

    return selectedItems; 
} 

난이 도움이되기를 바랍니다. 행운을 빕니다!

관련 문제