• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Połączenie funkcji z innej klasy z przyciskiem button

0 głosów
100 wizyt
pytanie zadane 3 września 2020 w C# przez Jacob7 Użytkownik (540 p.)
edycja 3 września 2020 przez Jacob7

Cześć. Robię kalkulator w c# i wpf. Jak dodaję metodę do przycisku to automatycznie jest ona tworzona w klasie głównej klasie public partial class MainWindow.

<Button x:Name="button_number0"  Click="Button_Number0_Click">
 </Button>
public partial class MainWindow : Window
{
        private void Button_Number0_Click(object sender, RoutedEventArgs e)
        {
                PierwszaLiczbaString += "0";
                PierwszaLiczbaDouble = Double.Parse(PierwszaLiczbaString);
                pierwsza_liczba.Text = PierwszaLiczbaString;
        }
}

Czy jest możliwość żebym funkcję Button_Number0_Click stworzył w innej klasie na przykład class Przyciski i połączył z tym przyciskiem?
Generalnie chciałbym mieć metody które są wywoływane przy kliknięciu przycisków w różnych klasach, a nie w jednej MainWindow, czy można to jakoś zrobić?

komentarz 4 września 2020 przez DarthMazut Bywalec (2,950 p.)
Możesz spróbować partial class, niestety nie jestem w stanie sprawdzić czy zadziała :(
Daj znać jeśli będziesz testował takie rozwiązanie. :)

1 odpowiedź

+1 głos
odpowiedź 4 września 2020 przez Siemił Mądrala (7,380 p.)
wybrane 14 października 2020 przez Jacob7
 
Najlepsza

Nie da się. Co potwierdza kompilator.

Ale jak chcesz mieć funkcję w różnych klasach zamiast zdarzenia(Event) użyj polecenia (Command). 

1) Tworzysz sobie takie polecenie jak np Add:

    public class Add : ICommand
    {
        public event EventHandler CanExecuteChanged;

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public void Execute(object parameter)
        {
            MessageBox.Show("Add something up");
        }
    }

2) Następnie tworzysz klasę która będzie przechowywać te polecenia np Addition:

    public class Addition
    {
        public ICommand Add
        {
            get
            {
                return new Add();
            }
        }
    }

3) Zostało jeszcze osadzenie klasy w kontekscie:

...
        <Button Content="Add" Command="{Binding Add}" >
            <Button.DataContext>
                <local:Addition/>
            </Button.DataContext>
        </Button>
...

Epilog) Możesz w różnych przyciskach osadzać różne klasy. Albo stworzyć jedną klasę która będzie przechowywać wszystkie polecenia. Wtedy należało by stworzyć klasę w kontekscie wyższego elementu. Jak chcesz się czegoś więcej dowiedzieć na ten temat poczytaj o wzorcu MVVM.

Podobne pytania

0 głosów
1 odpowiedź 40 wizyt
pytanie zadane 5 lutego 2020 w C# przez wo2324 Nowicjusz (200 p.)
0 głosów
1 odpowiedź 76 wizyt
pytanie zadane 28 grudnia 2019 w C# przez PH03NIX Bywalec (2,840 p.)
0 głosów
1 odpowiedź 88 wizyt
pytanie zadane 27 maja 2019 w C# przez Anon LVL 1000 Użytkownik (690 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

85,727 zapytań

134,512 odpowiedzi

298,568 komentarzy

56,635 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...