как я могу вызвать метод нажатия кнопки из другого класса - PullRequest
0 голосов
/ 05 января 2019

привет всем, я новичок в программировании на c # и wpf и я пытаюсь создать динамическое меню, где у меня есть кнопки + и -, которые влияют на текстовое поле, которое представляет количество. поэтому в сетке я вызываю класс productcard, который я вызываю на странице, чтобы заполнить сетку продуктами. Теперь проблема в том, как я могу использовать событие click внутри класса карточек продукта на моей странице, где у меня есть несколько карточек.

class productcard 
{

     Button plus = new Button();
    Button minus= new Button();
    public TextBox qtyl = new TextBox();
    Grid z = new Grid();
    public int left;
    public int top;

    GroupBox yy;
    public GroupBox XX { get { return this.yy; } set { this.yy = value; } }


    public productcard(int left , int top )
    {
        this.left = left;
        this.top = top;
        Thickness margin = new Thickness(left, top, 0, 0);
        Thickness bmar = new Thickness(0, 0, 0, 0);
        plus.Height = 30;
        plus.Width = 40;
        plus.VerticalAlignment = VerticalAlignment.Bottom;
        plus.HorizontalAlignment = HorizontalAlignment.Right;
        plus.Content = "+";
        plus.HorizontalContentAlignment = HorizontalAlignment.Center;

        // - button 
        minus.Height = 30;
        minus.Width = 40;
        minus.VerticalAlignment = VerticalAlignment.Bottom;
        minus.HorizontalAlignment = HorizontalAlignment.Left;
        minus.Content = "-";
        minus.HorizontalContentAlignment = HorizontalAlignment.Center;
        // add the button to the grid 
        z.Children.Add(plus);
        z.Children.Add(minus);
        // creat text box 
        qtyl = new TextBox();
        qtyl.Height = 30;
        qtyl.Width = 30;
        qtyl.Background = Brushes.White;
        qtyl.VerticalAlignment = VerticalAlignment.Bottom;
        qtyl.HorizontalAlignment = HorizontalAlignment.Center;
        qtyl.Text = "0";
        // add text box to the grid inside the group box
        z.Children.Add(qtyl);
        // creat group box
        GroupBox yy = new GroupBox();
        yy.Margin = margin;
        yy.VerticalAlignment = VerticalAlignment.Top;
        yy.HorizontalAlignment = HorizontalAlignment.Left;
        yy.Content = z;
        yy.Height = 150;
        yy.Width = 150;
        XX = yy;
        // insert group box in the produc grid 
    }




   public void plus_Click(object sender, EventArgs e)
    {
       // this.plus.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
        MessageBox.Show(" + has been cliked");
        int result=Convert.ToInt32(qtyl.Text)+1;
        qtyl.Text = result.ToString();
    }

    private void minus_Click(object sender, EventArgs e)
    {
        int result = Convert.ToInt32(qtyl.Text) - 1;
        qtyl.Text = result.ToString();
    }

}

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Реза прав в том, как написать больше кода для кнопки, сгенерированной в коде.

Однако я хотел бы предупредить вас, что это неправильное использование MVFM в WPF, и вы, возможно, позже решите проблему.

Я бы предложил привязать кнопки вашего представления к ICommand, которую можно определить в ViewModel, которая будет обрабатывать выполнение логики для вашего обновления текста. Как вы упомянули, у вас есть разные элементы управления представлением данных, основанные на нажатии вашей кнопки. Вы в настоящее время выживаете, поскольку представления непосредственно обновляют друг друга (ЭТО ПЛОХО). В тот момент, когда вы захотите представить эти данные в других представлениях, скажем, что вы хотите, чтобы ваша кнопка обновила 5 меток в 3 разных макетах в 2 окнах, у вас будут неуправляемые ссылки в ваших представлениях.

Если у вас есть ViewModel, получающая команду из вашего представления, привязанного к кнопке, вы можете заставить логику команды обновлять свойство в ViewModel, к которому можно привязать несколько представлений, и обновлять их все одновременно через INotifyPropertyChanged. Не говоря уже о том, что ICommand также позволяет вам полностью отключить нажатие кнопок.

Подумайте о том, чтобы потратить час на изучение этого руководства, чтобы увидеть разделение View и ViewModel. То, что ты сейчас делаешь, выглядит так, будто ты готовишься к миру боли позже ...

0 голосов
/ 05 января 2019

Вы можете сделать обработчик для своей кнопки следующим образом:

Button myButton=new Button(); 

myButton.Click += delegate(object sender, RoutedEventArgs e) {
   //handle event
};

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...