¿Cuál es la mejor manera de vincular el elemento ListView con un objeto para que cuando mueva el elemento de una vista de lista a otro, yo todavía podría decir a qué objeto está asignado. Por ejemplo, tengo el objeto Cards
Todos estos se enumeran en un allCards
ListView
. Tengo otro selectedCards
ListView
y un botón que mueve los elementos seleccionados de una vista de lista a otra. Cuando hice mi selección, necesito obtener la lista de los objetos Card
que se movieron al selectedCards
ListView.C# Tie ListView items with objects
Respuesta
Para ampliar @ respuesta de CharithJ, esto es como se puede utilizar la propiedad de la etiqueta:
ListView allCardsListView = new ListView();
ListView selectedCardsListView = new ListView();
List<Card> allCards = new List<Card>();
List<Card> selectedCards = new List<Card>();
public Form1()
{
InitializeComponent();
foreach (Card selectedCard in selectedCards)
{
ListViewItem item = new ListViewItem(selectedCard.Name);
item.Tag = selectedCard;
selectedCardsListView.Items.Add(item);
}
foreach (Card card in allCards)
{
ListViewItem item = new ListViewItem(card.Name);
item.Tag = card;
allCardsListView.Items.Add(new ListViewItem(card.Name));
}
Button button = new Button();
button.Click += new EventHandler(MoveSelectedClick);
}
void MoveSelectedClick(object sender, EventArgs e)
{
foreach (ListViewItem item in allCardsListView.SelectedItems)
{
Card card = (Card) item.Tag;
//Do whatever with the card
}
}
Obviamente tendrá que adaptarlo a su propio código, pero que debe empezar .
Sé que esta respuesta es vieja, pero esto fue *** EXACTAMENTE *** lo que estaba buscando. Nunca conocí la propiedad 'Tag', ni lo que hacía ni para qué era, así que muchas gracias: D – Nolonar
1st way.
Asigne el objeto a la propiedad Tag del ListViewItem. Obtén las etiquetas de los elementos seleccionados.
2nd Way.
Agregue el subItem invisible a la lista de lista que contiene el ID del objeto de la Tarjeta. Luego encuentra la tarjeta usando los ID de los ítems seleccionados.
Puede usar colecciones observables y crear una plantilla de datos para su clase Card
. Luego, simplemente une su ListView
a la colección y hace todo el trabajo por usted. Cuando agrega un artículo al ObservableCollection
, el ListView
se vuelve a dibujar automáticamente.
using System.Collections.ObjectModel;
<ListView Name="allCardsView" Source="{Binding}">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type yourXmlns:Card}">
//Your template here
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ListView Name="selectedCardsView" Source="{Binding}">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type yourXmlns:Card}">
//Your template here
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
ObservableCollection<Card> allCards = new ObservableCollection<Card>();
ObservableCollection<Card> selectedCards = new ObservableCollection<Card>();
allCardsView.DataContext = allCards;
selectedCardsView.DataContext = selectedCards;
public void ButtonClickHandler(object sender, EventArgs e)
{
if (allCardsView.SelectedItem != null &&
!selectedCards.Contains(allCardsView.SelectedItem))
{
selectedCards.Add(allCardsView.SelectedItem);
}
}
Lo siento, olvidé decir que estoy usando WinForms. – hs2d
Mejor uso ObjectListView. Es una forma perfecta de agregar y usar objetos con ListView. Con funciones como Hot tracking y fácil de usar, arrastrar y soltar su lista de listas se vuelve mucho más simple de manipular.
- 1. Cómo resaltar ListView-Items
- 2. Serializing/Deserializing Dictionary of objects with JSON.NET
- 3. List.Contains (item) with generic list of objects
- 4. Sort listview with array adapter
- 5. Weird Behavior of ListView with CheckBox
- 6. C# business objects and collections
- 7. Rendering C# Objects to Html
- 8. Loop Through An Objects Properties En C#
- 9. Imprimir encabezado CSV con Tie :: Handle :: CSV
- 10. Interfaz Go with C libraries
- 11. Screen Scraping HTML with C#
- 12. C# Enums with Flags Attribute
- 13. Joomla get ('Items') y cómo funciona
- 14. Encuadernación ObservableCollection items a UserControl en WrapPanel?
- 15. Agrupando Mongoid Objects por día
- 16. Interrumpir el tie en una cola de prioridad usando python
- 17. Diseño de Game Objects
- 18. Python simple naked objects
- 19. Javascript Global Objects
- 20. datetime objects format
- 21. Array of PHP Objects
- 22. struct objects en python
- 23. Rounding DateTime objects
- 24. numpy array of objects
- 25. Doctrine 2 Value Objects
- 26. Javascript expando objects
- 27. LINQ to Objects Optimization Techniques?
- 28. C# listview - controles de incrustación
- 29. C# LINQ to Objects: Group By/Sum help
- 30. C++ Qt Reflection with Copy and Assignment
Esta pregunta no es muy clara. Si movió esos objetos a 'selectedCards', ¿no es esa la lista que desea? –
@Steven: en ListView solo aparecen los nombres de las Tarjetas. – hs2d
Solo una pequeña sugerencia, sería más claro si cambiaras el nombre de todas las Tarjetas * a las Tarjetas disponibles * ... –