C# 将值从数据库绑定到控件

C# 将值从数据库绑定到控件,c#,wpf,mvvm,binding,C#,Wpf,Mvvm,Binding,我是WPF MVVM的新手。我有一个DataGrid。当我点击DataGrid行时,我访问了名为employee id的列值。然后我需要将所有行值绑定到相应的文本框以进行更新。我已将命令附加到窗口的已加载事件。但是当进入绑定方法时,employee id值被重置为null 这是我的HomeViewModel private DataRowView _SelectedRow; public DataRowView SelectedRow {

我是WPF MVVM的新手。我有一个
DataGrid
。当我点击
DataGrid
行时,我访问了名为employee id的列值。然后我需要将所有行值绑定到相应的文本框以进行更新。我已将命令附加到窗口的已加载事件。但是当进入绑定方法时,employee id值被重置为null

这是我的HomeViewModel

private DataRowView _SelectedRow;
        public DataRowView SelectedRow
        {
            get
            {
                return _SelectedRow;
            }
            set
            {
                if (_SelectedRow != value)
                {
                    _SelectedRow = value;
                    OnPropertyChanged("SelectedRow");
                }
            }
         }
这是我的方法

public void bindControlValues()
        {
            int id=Convert.ToInt32( SelectedRow.Row["Emp_ID"]);

            try
            {
                sqlConnection = new SqlConnection(Connection.connectionstring);
                sqlConnection.Open();
                selectCommand = new SqlCommand(AppConstants.StoredProcedures.GetDataProcedure);
                selectCommand.CommandType = CommandType.StoredProcedure;
                selectCommand.Parameters.Add(AppConstants.Parameters.Emp_ID, SqlDbType.Int).Value = id;

                sqlAdapter = new SqlDataAdapter(selectCommand);
                sqlDataSet = new DataSet();
                sqlAdapter.Fill(sqlDataSet);
                employee.FirstName = sqlDataSet.Tables[0].Rows[0][1].ToString();
                employee.LastName = sqlDataSet.Tables[0].Rows[0][2].ToString();
                employee.Dob = Convert.ToDateTime(sqlDataSet.Tables[0].Rows[0][3].ToString());
                employee.Age = Convert.ToInt32(sqlDataSet.Tables[0].Rows[0][4].ToString());
                employee.Street1 = sqlDataSet.Tables[0].Rows[0][5].ToString();
                employee.Street2 = sqlDataSet.Tables[0].Rows[0][6].ToString();
                employee.City = sqlDataSet.Tables[0].Rows[0][7].ToString();
                employee.State = sqlDataSet.Tables[0].Rows[0][8].ToString();
                employee.ZipCode = sqlDataSet.Tables[0].Rows[0][9].ToString();
                employee.PhoneNumber = sqlDataSet.Tables[0].Rows[0][10].ToString();
                employee.MobileNumber = sqlDataSet.Tables[0].Rows[0][11].ToString();
                employee.Email = sqlDataSet.Tables[0].Rows[0][12].ToString();
                employee.Web = sqlDataSet.Tables[0].Rows[0][13].ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                sqlConnection.Close();
                selectCommand.Dispose();
                sqlDataSet.Dispose();
            }

        }
这是我的xaml代码

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <cmd:EventToCommand Command="{Binding BindControlValueCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>



<TextBox  Name="txtFirstName" Text="{Binding Path=FirstName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">

<TextBox Name="txtLastName" Text="{Binding Path=LastName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"></TextBox>


您的文本框是在具有datagrid的同一窗口中还是在不同的窗口中。

一般来说,将数据库直接绑定到UI是不明智的。你是farmiliar吗?实际上我是通过属性来做的…它在不同的窗口中…我没有得到那个id…它正在重置为null。我有一个窗口,比如Home,有一个datagrid..和一个按钮,上面写着更新..当我在datagrid Selected row属性中选择行时,会得到包含员工信息的值。如firstname、lastname、id等..当单击Update按钮时,它被重置为空,这是所选的行属性..我如何访问更新窗口的员工id..帮助我..请..我需要更新这些值..我应该做什么..它在不同的窗口中..我没有得到该id..它被重置为空.我有一个窗口,比如Home,有一个datagrid..和一个按钮,上面写着更新..当我在datagrid Selected row属性中选择行时,会得到包含员工信息的值。如firstname、lastname、id等..当单击Update按钮时,它被重置为空,这是所选的行属性..我如何访问更新窗口的员工id..帮助我..请。。。