[C#/XAML] Problem z przypisaniem wartości dla zmiennej


(Namekxxx) #1

Witam,

mam fragment kodu z XAML'u:

...



...

i w C#:

public int metoda = 0;

...

private void opcja_1(object sender, RoutedEventArgs e)

{

            metoda = 1;

}


private void opcja_2(object sender, RoutedEventArgs e)

{

            metoda = 2;

}

...

Robiłem tak już wiele razy, wszystko śmiga - po wciśnięciu Przycisk1, wywoływana jest funkcja opcja_1, która przypisuje dla zmiennej metoda, wartość 1.

Analogicznie po wciśnięciu Przycisk2, wywoływana jest f. opcja_2, przypisująca zmiennej metoda, wartość 2.

Jednakże jest to trochę robota na 'około', bo oprócz przypisaniu zmiennej 'metoda' wartości, funkcje te nie robią zupełnie nic. Czy jest jakaś szansa, żeby w ogóle pozbyć się funkcji opcja_1, opcja_2, a za pomocą wciśnięcia przycisku, wartość była przypisywana bezpośrednio do zmiennej 'metoda'?

Oczywiście ...Click="metoda=1" nie śmiga.

Jakieś pomysły?


(Fiołek) #2

Można pobawić się triggerami*, ale nie do końca od tego są. Można zbindować IsPressed, ale trzeba przy tym strasznie kombinować(i nie jestem pewien czy się da).

Chyba najprościej i najlepiej będzie zrobić jedną metodę do obsługi zdarzenia Click dla wszystkich przycisków i w niej przypisywać wartość zmiennej na podstawie sendera. Np. zakładamy, że nazwa buttona odpowiada wartości, która ma być przypisana do zmiennej.

private void ButtonClick(object sender, RoutedEventArgs e)

{

    metoda = int.Parse(((Button)sender).Name);

}

* - nie jestem pewien czy jest implementacja Settera, który potrafiłby przypisać wartość do DataContext, ale można spróbować:

Jest to strasznie naokoło i nie od tego XAML jest, ale można zmusić to do działania.


(Musialowski Tomasz) #3

Przekazywanie wartości przez nazwę to nie najlepszy pomysł. To może zamieszać w czytelności kontrolek gdy będziemy odwoływać się do interfaceu. Do przekazania wartości lepiej użyć właściwości Tag.