Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文本框到datagrid WPF C#_C#_Wpf - Fatal编程技术网

从文本框到datagrid WPF C#

从文本框到datagrid WPF C#,c#,wpf,C#,Wpf,因此,我目前正在尝试一些不同的东西,我想将文本从我的文本框推送到数据网格。目前,我的XAML如下所示: XAML: 正如你们所看到的,我已经有了一个名为send的按钮,还有一个名为ID和NAME的文本框 那么,我如何只需点击1个按钮(发送)就可以将文本框中的文本添加到数据网格中,以及如何在第二行和第三行等重复该操作?如果您有一个视图模型,那么您可以将两个不同的控件绑定到同一字段 这意味着当您更改文本框时,它将使用绑定来更新备份字段,然后VM将通知所有控件它们需要更新该值 class VM :

因此,我目前正在尝试一些不同的东西,我想将文本从我的文本框推送到数据网格。目前,我的XAML如下所示:

XAML:


正如你们所看到的,我已经有了一个名为send的按钮,还有一个名为ID和NAME的文本框


那么,我如何只需点击1个按钮(发送)就可以将文本框中的文本添加到数据网格中,以及如何在第二行和第三行等重复该操作?

如果您有一个视图模型,那么您可以将两个不同的控件绑定到同一字段

这意味着当您更改文本框时,它将使用绑定来更新备份字段,然后VM将通知所有控件它们需要更新该值

class VM : INofityPropertyChanged
{
    private string text;
    public string Text
    {
        get=>text;
        set{
            text=value;
            PropertyChanged(this,new PropertyChangedEventArg("Text");
        }
    }
    ...
}
然后使用绑定

<TextBox Text="{Binding Text}"/>
<Label Content="{Binding Text}"/>


这假设您已将VM设置为数据上下文

简单而直接的方法是,只需将事件处理程序添加到
按钮
单击
事件,然后将类的实例添加到
数据网格
的源集合中,例如:

public partial class MainWindow : Window
{
    private readonly ObservableCollection<Model> _items = new ObservableCollection<Model>();

    public MainWindow()
    {
        InitializeComponent();
        dataGrid.ItemsSource = _items;
        btnSend.Click += BtnSend_Click;
    }

    private void BtnSend_Click(object sender, RoutedEventArgs e)
    {
        _items.Add(new Model() { ID = txtID.Text, NAME = txtNAAM.Text });
    }
}

public class Model
{
    public string ID { get; set; }
    public string NAME { get; set; }
}
公共部分类主窗口:窗口
{
私有只读ObservableCollection _items=新ObservableCollection();
公共主窗口()
{
初始化组件();
dataGrid.ItemsSource=\u项;
btnSend.Click+=btnSend\u Click;
}
私有无效BTN发送\单击(对象发送者,路由目标e)
{
_添加(新模型(){ID=txtID.Text,NAME=txtNAAM.Text});
}
}
公共类模型
{
公共字符串ID{get;set;}
公共字符串名称{get;set;}
}

如果您正在开发企业应用程序,您应该考虑重构代码,以便在视图(窗口)和模型之间使用视图模型类,以实现可测试性和关注点分离。这种设计模式被称为。

我认为了解MVVM的工作原理是很好的第一步
public partial class MainWindow : Window
{
    private readonly ObservableCollection<Model> _items = new ObservableCollection<Model>();

    public MainWindow()
    {
        InitializeComponent();
        dataGrid.ItemsSource = _items;
        btnSend.Click += BtnSend_Click;
    }

    private void BtnSend_Click(object sender, RoutedEventArgs e)
    {
        _items.Add(new Model() { ID = txtID.Text, NAME = txtNAAM.Text });
    }
}

public class Model
{
    public string ID { get; set; }
    public string NAME { get; set; }
}