2009-03-20 14 views

Respuesta

1

Si está utilizando el ListView como está previsto, estará vinculado a una lista subyacente de algún tipo de objeto, y esa clase debe implementar INotifyChanged. En WPF no agrega/elimina elementos directamente de ListView, maneja la estructura de la lista enlazada y notifica a la UI del cambio, que luego se redibuja inteligentemente con los nuevos elementos.

6

Esta es la forma en que agregaría un ListViewItem creada en código a su ListView:

myListView.Items.Add(new ListViewItem { Content = "This is an item added programmatically." }); 

Sin embargo, estoy de acuerdo con MrTelly que esto no debería ser necesario, debe estar fijándose ListView.ItemsSource a alguna colección en lugar de manipular ListView.Items directamente.

Si nos proporciona más detalles sobre lo que quiere lograr quizás podamos ayudarlo a hacerlo de la manera WPF, que no siempre es la manera fácil al principio, pero es mucho más fácil a largo plazo.

4

me preguntó exactamente la misma pregunta HERE (y contestado yo - yo tenía un problema en mi código). Espero que ayude.

4

Agregarlo directamente a ListView en su aplicación no es necesariamente el "WPF-way". Considere esto:

public class BindableListViewModel 
{ 

    public IList<TypeOfObjectToDisplay> AllObjectsToDisplay; 
    public ICommand AddNewItemToList; 

    public BindableListViewModel() 
    { 
     AllObjectsToDisplay = new ObservableList<TypeOfObjectToDisplay>(); 
     AddNewItemToList = new RelayCommand(AddNewItem(), CanAddNewItem()); 
    } 

    public bool CanAddNewItem() 
    { 
     //logic that determines IF you are allowed to add 
     //For now, i'll just say that we can alway add. 
     return true; 
    } 

    public void AddNewItem() 
    { 
     AllObjectsToDisplay.Add(new TypeOfObjectToDisplay()); 
    } 

} 

Luego, en XAML todo lo que tenemos que hacer es obligar a la ItemsSource de nuestra ListView a nuestra lista AllObjectsToDisplay. Esto nos permite separar la dependencia de agregar objetos directamente a nuestro ListView; podemos usar la fuerza de enlace de datos de WPF a eliminar la dependencia directa sobre CÓMO agregamos objetos comerciales a nuestro contenedor de UI en el que los mostramos, ¡una práctica muy útil!

2

(lo siento, no puede hacer comentarios por el momento)

Como MrTelly es a ...

Enlazar la vista de lista a un ObservableCollection

ObservableCollection<MyClassItem> lvList = new ObservableCollection<MyClassItem>(); 
myListview.ItemSource = lvList; 

// Add an item 
lvList.Add(new MyClassItem("firstname", "lastname")); 

De esta manera se actualizará automáticamente el UI cuando se realizan cambios en la colección.

Cuestiones relacionadas