我如何从另一个类调用按钮单击方法

时间:2019-01-05 19:52:30

标签: c# wpf

大家好,我是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 :(得分:0)

您可以像这样为按钮创建处理程序:

Button myButton=new Button(); 

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

我希望这会有所帮助。

答案 1 :(得分:0)

在为代码中生成的Button编写更多代码方面,Reza是正确的。

但是,我要警告您,这不是MVVM的WPF正确使用方式,以后您可能会陷入麻烦。

我建议您将视图的按钮绑定到可以在ViewModel中定义的ICommand,该ICommand将处理文本更新的逻辑。 如前所述,您具有不同的视图控件,这些控件根据按钮的按下来表示数据。您目前还活着,因为视图之间是直接相互更新的(这很糟糕)。 当您想在其他视图中表示此数据时,例如,您希望按钮在2个窗口中以3种不同的布局更新5个标签,那么您的视图中将具有无法维护的引用。

如果您使ViewModel从与按钮绑定的视图中获取命令,则可以使命令逻辑更新可以绑定多个视图的ViewModel中的属性,并通过INotifyPropertyChanged同时更新它们。 更不用说,ICommand还可以让您完全禁止单击按钮。

考虑花费一个小时来查看本教程,以了解View和ViewModel的分离。您现在正在做的事情看起来像是让您以后遭受了很多伤害...