Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

WPF i validacija child kolekcije

[es] :: .NET :: WPF Programiranje :: WPF i validacija child kolekcije

[ Pregleda: 776 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jovanpavlovic777

Član broj: 324940
Poruke: 25
*.dynamic.sbb.rs.



Profil

icon WPF i validacija child kolekcije11.05.2017. u 14:56 - pre 12 meseci
Na WPF aplikaciji na kojoj radim koristim INotifyDataErrorInfo za validaciju elementa iz moga MVVM koji je data bindovan na kontrole u formi. To dobro radi.
Sada, imam potrebu da implementiram isti (ili slican mehanizam) i na elemente iz child kolekcije u mome VM-u.
Dakle ako VM elementa iz child kolekcije podigne validation error, kako onda da taj error 'javim' parent VM-u? Onda bi moj UI uradio neku akciju (recimo disablovao bi SAVE)...
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12334



Profil

icon Re: WPF i validacija child kolekcije11.05.2017. u 17:15 - pre 12 meseci
Mozes iz parent-a staivti event handler za ErrorsChanged child-ova i odatle raise-ujes event u parent-u.
Shoutout:
Odeća i oprema za bebe i klince: https://bebili.rs
 
Odgovor na temu

jovanpavlovic777

Član broj: 324940
Poruke: 25
*.dynamic.sbb.rs.



Profil

icon Re: WPF i validacija child kolekcije12.05.2017. u 09:18 - pre 12 meseci
Hvala na odgovoru, tako sam na kraju otprilike resio...

Imam recimo sledecu kolekciju u VM-u:

public ObservableCollection<Customer> DataListX
...

Onda setujem Changed event:

DataListX.CollectionChanged += DataListX_CollectionChanged;

tamo dodam evente na iteme:

void DataListX_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Remove)
{
foreach (Customer item in e.OldItems)
{
//Removed items
item.PropertyChanged -= EntityPropertyChanged;
}
}
else if (e.Action == NotifyCollectionChangedAction.Add)
{
foreach (Customer item in e.NewItems)
{
//Added items
item.PropertyChanged += EntityPropertyChanged;
}
}
}

I onda ovde setujem error kolekciju za error u childu:

private void EntityPropertyChanged(object sender, PropertyChangedEventArgs e)
{
Customer obj = sender as Customer;

if(obj!=null)
{
if(obj.HasErrors)
{
foreach(KeyValuePair<string, List<string>> pair in obj.errors)
{
setErrors("DataListX", pair.Value);
}
}
else
{
ClearErrors("DataListX");
}
}


}


Medjutim, ovde imam jedan problem kada imam vise erorra na itemima u kolekciji...
Kako da znam koji tacno item u child kolekciji ima error?
Posto uvek stize event za promenu na kolekciji pa je ja onda inserujem kao "DataListX"

To sam delimicno resio tako sto sam napravio i jedan set errors hanlder metoda koje rade sa objektima, ali je onda problem sto nemam tooltip u UI za taj element u kolekciji...
Da li postoji optimalna metodologija za resenje ovoga problema?
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12334



Profil

icon Re: WPF i validacija child kolekcije12.05.2017. u 10:23 - pre 12 meseci
Ako ti customer implementira INotifyDataErrorInfo interface, onda umesto da handlas PropertyChanged event, handlaj ErrorsChanged event (redje se desava pa manje izvrsavanja koda ima).
Tu onda mozes imati jednu listu sa svim Customer-ima koji imaju error i na ErrorsChanged dodajes/izbacujes zavisno od toga da li ima error ili ne.
U slucaju da ti lista Customer-a sa errorima treba samo povremeno, mozes proci kroz sve i odabrati samo one kojima je HasErrors == true
Shoutout:
Odeća i oprema za bebe i klince: https://bebili.rs
 
Odgovor na temu

[es] :: .NET :: WPF Programiranje :: WPF i validacija child kolekcije

[ Pregleda: 776 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.