将DataGrid的一行传递到另一个WPF窗体中的C#

3
我有一个包含的WPF表单,另一个包含的WPF表单。 我正在尝试将所选行的每个单元格的值传递到另一个表单中,但我不知道如何在WPF中实现这一点。
在WPF Form2中,我想将这些值放入中进行编辑,然后更新Form1的行以及相关联的。
如何解决这个问题?
谢谢。

你的数据模型是什么样子的?你的DataGrid数据源长什么样子? - AnjumSKhan
1个回答

3

看起来您正在使用 DataSet 作为您的 DataGrid

  1. 使用 Binding 获取所选行 (SelectedItem)。

  2. 将此 ChosenItem 作为 ref 发送到其他表单/窗口。

  3. 将此已发送的 ChosenItem 设置为表格的 DataContext

现在,当您在 Form2 中更改值时,将会在 Form1 中反映出这些更改。

例如代码:

Form1

   <Grid>
        <DataGrid x:Name="Dgrid" HorizontalAlignment="Left" Margin="10,31,0,0" VerticalAlignment="Top" SelectedItem="{Binding ChosenItem}" />            
        <Button Content="Edit" HorizontalAlignment="Left" Margin="10,4,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
    </Grid>

Form1的后台代码

public partial class MainWindow : Window
{
    DataStore ds = new DataStore();

    public MainWindow()
    {
        InitializeComponent();

        Dgrid.DataContext = ds;
        Dgrid.ItemsSource = ds.DataSource.Tables[0].DefaultView;
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        DataRowView item = ds.ChosenItem;
        Window1 w = new Window1(ref item); // send selected row as ref to other form
        w.Show();
    }
}

   public class DataStore
   {
        public DataRowView ChosenItem { get; set; }

        public DataStore()
        {
            DataTable table1 = new DataTable();
            table1.Columns.Add(new DataColumn("Name", typeof(string)));
            table1.Columns.Add(new DataColumn("Address", typeof(string)));

            DataRow row = table1.NewRow();
            row["Name"] = "Name1";
            row["Address"] = "203 A";
            table1.Rows.Add(row);

            row = table1.NewRow();
            row["Name"] = "Deepak";
            row["Address"] = "BHEL Bhopal";
            table1.Rows.Add(row);

            ds.Tables.Add(table1);
        }

        DataSet ds = new DataSet();
        public DataSet DataSource { get { return ds; } }
    }

表单2

        <Grid x:Name="FormGrid" DataContext="{Binding SelectedItem, ElementName=Dgrid}">
            <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="{Binding Name}" VerticalAlignment="Top" Width="120"/>
            <TextBox HorizontalAlignment="Left" Height="23" Margin="0,49,0,0" TextWrapping="Wrap" Text="{Binding Address}" VerticalAlignment="Top" Width="120"/>
            <Button Content="Button" HorizontalAlignment="Left" Margin="0,100,0,0" VerticalAlignment="Top" Width="75"/>
        </Grid>
标签的后台代码
public Window1(ref DataRowView item)
{
    InitializeComponent();
    FormGrid.DataContext = item;
}

1
在这种情况下,我如何才能在单击“更新”按钮时仅更新DataGrid?因为现在,如果我编辑Form2上的TexBoxes,则Form1会自动更新。但是我想要等待单击“更新”按钮。 - LenJack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接