[C#] INotifyPropertyChanged a co z timerami


(Marcin Obala) #1

Cześć

W mojej aplikacje zastosowałem koncepcje separacji kodu od GUI. Textboxy i inne kontrolki są podpięte pod zmienne w mojej klasie. Jak zmienię tekst zmiennej to automatycznie updatuje się textBox. No ok, wszystko działa jak należy. Ale natrafiłem na przypadek gdzie muszę zmienić interwał timeru w formie. To jest timer który nie pasuje żeby go umieścić w klasie dlatego został na zewnątrz w formie. Do timera nie mogę zabindować żadnego property z mojej klasy. Jak zmienić interwal? Ja już myślałem nawet o obejściach typu niewidoczny textBox, zmieniam mu tekst na liczbę jaką chce mieć jako interwał a następnie przez event textChanged w formie aktualizuję Interwał timera. Sposób jest ale nie ładny. Czy ogólnie wyjaśniłem przystępnie czy muszę podać kawałek kodu?


(Fiołek) #2

Zarówno DispatcherTimer jak i Timer mają właściwość Interval publiczną i z publicznym setterem - nic nie stoi na przeszkodzie podbindowaniu do niego, aczkolwiek trzeba by podać odpowiedni konwerter, by dało się przypisać do DispatcherTimer.Interval(konwersja na double powinna być automatyczna).

Jeśli timer jest w formie i kontrolka też jest formie, to nic nie stoi na przeszkodzie, by przypisać do niego nawet jeśli nie jest głównym _DataContext_em(zakładam, że to WPF, ale WinForms miało to podobnie rozwiązane IIRC). Ewentualnie można utworzyć właściwość w ‘klasie’, która będzie działać jako proxy między kontrolką a timerem - wszystko napisane ręcznie(nie będzie trudne - to nadal będzie jednolinijkowy getter + setter), bez kombinowania z bindingami(w prostych sytuacjach się sprawdzają, ale czasami tylko przeszkadzają).