Na swoim widoku mam ListView która wyswietla zawartość takiej kolekcji.
private ObservableCollection<KalkulowanaOperacjaWydania> listaKalkulowanychOperacji;
public ObservableCollection<KalkulowanaOperacjaWydania> ListaKalkulowanychOperacji
{
get { return listaKalkulowanychOperacji; }
}
do tej kolekcji dodaje i usuwam obiekty 'KalkulowanaOperacjaWydania' jak w listingu ktory wkleiłem tutaj:
[reakcja na dodawanie i usuwanie obiektow z ObservableCollection<KalkulowanaOperacjaWydania> ListaKalkulowanychOperacji]https://4programmers.net/Forum/Algorytmy/357926-szukam_algorytmu_po_podpowiedziach_pewnie_pojawi_sie_tu_w_tytule_nazwa_tego_algorytmu?p=1819822#id1819822)
obiekt 'KalkulowanaOperacjaWydania' to model, nie implementuje 'INotifyPropertyChanged', i sklada się z samych wlasciwosci tylko do odczytu, za aktualą wartosc tych wlasciwosci odpowiada obiekt nastaw ktory jest wywolywany w kazdym getterze:
public class KalkulowanaOperacjaWydania
{
private readonly OperacjaTechnologiczna operacjaOryginalna;
private readonly IEnumerable<ParaIndexNrOperacjiZwiazanej> pelnyBomIndexu;
private NastawyKalkulacjiCzasowWydan nastawy;
private KryteriaDoboruOperacjiWydan filtrOperacjiWydan;
public KalkulowanaOperacjaWydania(OperacjaTechnologiczna operacja, IEnumerable<ParaIndexNrOperacjiZwiazanej> pelnaListaBom,
NastawyKalkulacjiCzasowWydan nastawy, KryteriaDoboruOperacjiWydan zakresIndexowOrazOperacji)
{
this.operacjaOryginalna = operacja;
this.nastawy = nastawy;
this.pelnyBomIndexu = pelnaListaBom;
this.filtrOperacjiWydan = zakresIndexowOrazOperacji;
}
public int LicznikWystapien { get; set; }
public OperacjaTechnologiczna OryginalnaOperacjaTechnologiczna { get { return operacjaOryginalna; } }
public bool CzyGenerowacPRN { get; set; }
public string Index { get { return operacjaOryginalna.IndexArtykulu; } }
public string AltNrMarszruty { get { return operacjaOryginalna.NrMarszruty; } }
public int NrOperacji { get { return operacjaOryginalna.NrOperacji; } }
public string KodOperacjiWydania { get { return operacjaOryginalna.KodStanowiska; } }
public int LiniiDoWydania { get { return ListaMaterialowWydawanychZTejOperacji.Count(); } }
public CzasScala Oryginalny_Tpz { get { return operacjaOryginalna.CzasPrzygotowania; } }
public CzasScala Oryginalny_Tr { get { return operacjaOryginalna.CzasRealizacji; } }
public CzasScala OryginalnyCzasWydaniaMalego
{ get { return Oryginalny_Tpz + Oryginalny_Tr.PrzemnozCzasPrzez(nastawy.WielkoscMalegoZlecenia); } }
public CzasScala OryginalnyCzasWydaniaDuzego
{ get { return Oryginalny_Tpz + Oryginalny_Tr.PrzemnozCzasPrzez(nastawy.WielkoscDuzegoZlecenia); } }
public CzasScala Nowy_Tpz { get { return nastawy.Zwroc_Tpz_DlaIlosciLiniiWBom(ListaMaterialowWydawanychZTejOperacji.Count()); } }
public CzasScala Nowy_Tr { get { return nastawy.Zwroc_Tr_DlaIlosciLiniiWBom(ListaMaterialowWydawanychZTejOperacji.Count()); } }
public CzasScala NowyCzasWydaniaMalego
{ get { return Nowy_Tpz + Nowy_Tr.PrzemnozCzasPrzez(nastawy.WielkoscMalegoZlecenia); } }
public CzasScala NowyCzasWydaniaDuzego
{ get { return Nowy_Tpz + Nowy_Tr.PrzemnozCzasPrzez(nastawy.WielkoscDuzegoZlecenia); } }
(.......)
}
}
jego aktualnosc zalezy od obiektu typu 'NastawyKalkulacjiCzasowWydan' który z koleii jest powiazany z widokiem poprzez ViewModel i w czasie rzeczywistym jest synchronizowany z tym co uzytkownik ustawi w widoku.
Glowny problem polega na tym ze, ListView na Widoku do ktorego zbindowana jest 'ObservableCollection<KalkulowanaOperacjaWydania> ListaKalkulowanychOperacji' nie jest odswiezany na bieząco po zmianach nastaw.
Jak to osiagnac aby podgladac wyniki przeliczen po kazdej zmianie nastaw?
@neves @Piotr.Net - bedę wdzięczny za podpowiedzi.
tutaj najwazniejsze elementu ViewModelu:
public class CzasyWydanVM : UserControl_ViewModelBase
{
private NastawyKalkulacjiCzasowWydan nastawy = new NastawyKalkulacjiCzasowWydan();
private KryteriaDoboruOperacjiWydan zakresIndexowOrazOperacji = new KryteriaDoboruOperacjiWydan();
public CzasyWydanVM(ObservableCollection<ArtykulScalaVM> kolekcja, ISmartReader reader) : base(kolekcja, reader)
{
NazwaViewModelu = nameof(CzasyWydanVM);
kolekcjaArtykulowZaCheckowanychNaListViewNaOknieGlownym.CollectionChanged += SynchronizacjaPrzeliczaniaZacheckowanychArtykulow;
listaKalkulowanychOperacji = new ObservableCollection<KalkulowanaOperacjaWydania>();
}
public int WielkoscMalegoZlecenia
{
get { return nastawy.WielkoscMalegoZlecenia; }
set { nastawy.WielkoscMalegoZlecenia = value;
OnPropertyChanged(nameof(WielkoscMalegoZlecenia)); }
}
public int WielkoscDuzegoZlecenia
{
get { return nastawy.WielkoscDuzegoZlecenia; }
set { nastawy.WielkoscDuzegoZlecenia = value;
OnPropertyChanged(nameof(WielkoscDuzegoZlecenia));
}
}
public int DolnaGranica_PrzedzialuPierwszego
{
get { return nastawy.DolnaGranica_Przedz_1; }
set { nastawy.DolnaGranica_Przedz_1 = value;
OnPropertyChanged(nameof(DolnaGranica_PrzedzialuPierwszego)); }
}
public int GornaGranica_PrzedzialuPierwszego
{
get { return nastawy.GornaGranica_Przedz_1; }
set { nastawy.GornaGranica_Przedz_1 = value;
OnPropertyChanged(nameof(GornaGranica_PrzedzialuPierwszego));
OnPropertyChanged(nameof(DolnaGranica_PrzedzialuDrugiego)); }
}
public decimal Tpz_PrzedzialuPierwszego
{
get { return nastawy.Tpz_Przedz_1; }
set { nastawy.Tpz_Przedz_1 = value;
OnPropertyChanged(nameof(Tpz_PrzedzialuPierwszego)); }
}
public decimal Tr_PrzedzialuPierwszego
{
get { return nastawy.Tr_Przedz_1; }
set { nastawy.Tr_Przedz_1 = value;
OnPropertyChanged(nameof(Tr_PrzedzialuPierwszego)); }
}
(...)