大家好,我是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();
}
}
答案 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的分离。您现在正在做的事情看起来像是让您以后遭受了很多伤害...