Czy ktoś może wskazać przykład, w którym zaimplementowano funkcję CollectionChanged. Używam światła wpf mvvm. Próbowałem google, nie znalazłem nic dobrego.KolekcjaZmieniona próbka
Odpowiedz
public ObservableCollection<string> Names { get; set; }
public ViewModel()
{
names = new ObservableCollection<string>();
Names.CollectionChanged += this.OnCollectionChanged;
}
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
//Get the sender observable collection
ObservableCollection<string> obsSender = sender as ObservableCollection<string>;
List<string> editedOrRemovedItems = new List<string>();
foreach(string newItem in e.NewItems)
{
editedOrRemovedItems.Add(newItem);
}
foreach(string oldItem in e.OldItems)
{
editedOrRemovedItems.Add(oldItem);
}
//Get the action which raised the collection changed event
NotifyCollectionChangedAction action = e.Action;
}
Aby uzyskać więcej informacji na temat NotifyCollectionChangedEventArgs wyglądać here.
EDYCJA: Ponieważ potrzebna jest lista dodanych/usuniętych elementów, zmodyfikowałem przykładowy kod.
z jakiegoś powodu, metoda onCollectionChanged zostaje wywołana tylko w przypadku dodawania lub usuwania elementów. ale nie w przypadku elementu edycji. Chciałbym również wiedzieć, jak posunąć się naprzód, mam na myśli to, jak ostatecznie wysłać listę/kolekcję nowo dodanych, usuniętych i edytowanych przedmiotów w jednym zbiorze. Dzięki. – WhoIsNinja
Wygląda na to, że masz kolejne pytanie do opublikowania. –
ObservableCollection nie udostępnia funkcji do wywoływania funkcji OnCollectionChanged podczas edycji elementów. Musisz to zrobić sam. Twoje produkty w kolekcji muszą implementować INotifyPropertyChanged i musisz dodać detektory zdarzeń do zdarzenia PropertyChanged INotifyPropertyChanged. Spójrz na http://stackoverflow.com/questions/269073/observablecollection-that-also-monitors-changes-on--elements-in-collection, aby uzyskać więcej informacji. – Arxisos
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
private ObservableCollection<Person> persons = new ObservableCollection<Person>();
public MainWindow()
{
InitializeComponent();
dgPerson.ItemsSource = persons;
persons.CollectionChanged += this.OnCollectionChanged;
}
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
//Get the sender observable collection
ObservableCollection<Person> obsSender = sender as ObservableCollection<Person>;
NotifyCollectionChangedAction action = e.Action;
if (action == NotifyCollectionChangedAction.Add)
lblStatus.Content = "New person added";
if (action == NotifyCollectionChangedAction.Remove)
lblStatus.Content = "Person deleted";
}
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
Person p = new Person();
p.FirstName = txtFname.Text;
p.LastName = txtLname.Text;
persons.Add(p);
}
- 1. Próbka wstążki
- 2. Próbka aplikacji?
- 3. Próbka palca MonoTouch
- 4. Próbka LDAP Active Directory
- 5. Próbka kompilująca wyjście ANTRL4
- 6. Prosta próbka semaforowa
- 7. HelloWebView Próbka: java.lang.SecurityException: Permission Denial
- 8. Próbka właściwości statycznej z moq
- 9. Próbka asocjacyjna w extjs 4.2:
- 10. OpenCV 3.0.0 FaceDetect Próbka nie
- 11. Próbka serwera Indy 10 Http
- 12. Ile sekund "próbka" reprezentuje profiler?
- 13. Error loading próbka django-bootstrap3 szablon
- 14. Losowa próbka z danego dwuwymiarowego dyskretnego rozkładu
- 15. Niezwykle prosta próbka WP7 MVVM-Light?
- 16. Próbka za pomocą MSCHART w C#
- 17. Próbka IB API Python nie używa Ibpy
- 18. Czy ta próbka skrótu może być krótsza?
- 19. Pasek narzędzi Android, jak np. Próbka twittera
- 20. Losowa próbka podzbioru ramki danych w Pandach
- 21. Próbka losowa liczba całkowita w Rcpp
- 22. Próbka na NamedPipeServerStream kontra NamedPipeServerClient o PipeDirection.InOut potrzebne
- 23. Czy istnieje sposób sprawdzenia, czy próbka została skonfigurowana dla członka?
- 24. Próbka dokładne wydobycie kawałkami audio za pomocą AVFoundation
- 25. próbka meteorytu z satelitów 2 przestała działać po aktualizacji meteorytu
- 26. Subsoniczna próbka ASP.NET MVC w programie Visual Web Developer Express
- 27. Czy istnieje aktualna próbka C# dla interfejsu API produktu Amazon?
- 28. Jaki jest kanoniczny dźwięku próbka typ danych w iOS 5
- 29. Próbka MySQL dla Visual Basic 6.0 - odczyt/zapis
- 30. próbka uczenia się prawdopodobnych() i nieprawdopodobnych() wskazówek dotyczących kompilatora
Trochę więcej szczegółów, proszę. Co próbujesz zrobić? –
Mam datagrid z obserwowalnym źródłem przedmiotów z włączoną edycją, po zakończeniu edycji/dodania/usunięcia danych z tego datagridu chcę wysłać te dane do serwisu internetowego w celu aktualizacji. – WhoIsNinja
Nie mogę uwierzyć, że zaakceptowałeś odpowiedź Arxisos poniżej ... poniższy kod nie ma sensu ... W jaki sposób wdrożyć NotifyCollectionChanged i NotifyCollectionChangedEventArgs? Zajrzyj tutaj http://blog.stephencleary.com/2009/07/interpreting-notifycionlectlectchangedeve.html, aby uzyskać dobre krótkie opisy, a także linki do implementacji i dalsze szczegóły. – Beachwalker