Binding w WPF

kociol21
  • Rejestracja:ponad 14 lat
  • Ostatnio:8 miesięcy
  • Postów:46
0

Nic nie pamiętam z WPFu i mam problem z banalnym bindingiem. Mam taką prościutką klasę, która implementuje INotifyPropertyChanged. Jest tam właściwość Zmienna1, właściwość Zmienna2 i właściwość Wynik (przyjmująca jakąś tam wartość po operacjach na zmiennych np. Wynik = Zmienna1 + Zmienna2).

Na początku w kodzie mam DataContext okna ustawiony na instancję mojej klasy.

Na głównej formie mam 3 textboxy.

  1. ma
Kopiuj
Text="{Binding Path=Zmienna1, Mode=TwoWay}"/> 
  1. ma
Kopiuj
Text="{Binding Path=Zmienna2, Mode=TwoWay}"/> 
  1. ma
Kopiuj
Text="{Binding Path=Wynik, Mode=TwoWay}"/> 

I dzieje się coś takiego: w momencie jak odpalam program, wszystkie 3 textboxy pokazują prawidłowe wartości. Natomiast w momencie kiedy zmieniam w textboxie zawartość, zmienia się również Zmienna1 ale z wynikiem nic się nie dzieje. Jak zmusić tą właściwość "Wynik" aby na bieżąco "nasłuchiwała" zmian? To są absolutne podstawy ale mam zaćmę i w dodatku nie mogę nic znaleźć :O


"Prawdziwa głupota zawsze pokona sztuczną inteligencję."
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
kociol21
  • Rejestracja:ponad 14 lat
  • Ostatnio:8 miesięcy
  • Postów:46
0
abrakadaber napisał(a):

http://msdn.microsoft.com/pl-pl/library/system.componentmodel.inotifypropertychanged.aspx

Dalej nie do końca kojarzę :)

Mam tak:

Kopiuj
private double zmienna1;
        public double Zmienna1
        {
            get { return zmienna1; }
            set
            {
                if (zmienna1 != value)
                {
                    zmienna1 = value;
                    NotifyPropertyChanged("Zmienna1");
                }
            }
        }

To samo dla Zmienna2. Dalej dla wynik:

Kopiuj
private double wynik
public double Wynik
        {
            get
            {
                //jakieś obliczenia na zmiennych, powiedzmy, że 
                    wynik = Zmienna1+Zmienna2
                    return wynik;
            }
            
       }

Settera nie ma bo z założenia ma być to właściwość tylko do odczytu. Poszczególne właściwości dobrze się bindują z odpowiednimi textboxami ale tylko na starcie aplikacji. Potem, jakkolwiek bym nie zmieniał Zmienna1 i Zmienna2, wynik pozostaje taki jak przy inicjalizacji.


Edyta:
Jak w textboxie powiązanym z wynikiem pogrzebałem przy UpdateSourceTrigger to pole aktualizuje się, przy próbie zmiany zawartości ale to dalej nie to. Chciałbym, żeby przy zmianie którejkolwiek ze zmiennych wynik był od razu przeliczany na nowo i przepychany do textboxa bez konieczności ustawiania na nim fokusa itp.


"Prawdziwa głupota zawsze pokona sztuczną inteligencję."
edytowany 1x, ostatnio: kociol21
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1
kociol21 napisał(a):
abrakadaber napisał(a):

http://msdn.microsoft.com/pl-pl/library/system.componentmodel.inotifypropertychanged.aspx

Dalej nie do końca kojarzę :)
jaki kod podałeś taką dostałeś odpowiedź...

A co do problemu to dodaj jeszcze po NotifyPropertyChanged("Zmienna1"); NotifyPropertyChanged("Wynik");


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber
kociol21
Wiedziałem, że to musi być proste. Podziękował pięknie, wszystko śmiga teraz :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.