使用linq将一个表中的行保存到另一个表中

时间:2014-10-28 14:36:54

标签: c# wpf xaml mvvm

您知道何时将表从dataSources窗口拖放到用户控件上? Visual Studio自动创建一个datacontext(在视图的xaml中)以将页面上的新元素绑定到。此dataContext设置为collectionViewSource,此collectionViewSource从数据集中提取它的信息。在拖放时从表中获取的相同数据集。

在我的场景中,这就是它创造的内容:

<UserControl.Resources>
    <CollectionViewSource x:Key="signupsViewSource" Source="{Binding signups, Source={StaticResource myAppnDataSet}}/>
</UserControl.Resources>

<Grid DataContext="{StaticResource signupsViewSource}">
    <TextBox x:Name="idTextBox" Text="{Binding id, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, UpdateSourceTrigger=PropertyChanged}"/>
    <TextBox x:Name="firstnameTextBox" Text="{Binding firstname, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, UpdateSourceTrigger=PropertyChanged}"/>
    <TextBox x:Name="surnameTextBox" Text="{Binding surname, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, UpdateSourceTrigger=PropertyChanged}"/>
    <TextBox x:Name="usernameTextBox" Text="{Binding username, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, UpdateSourceTrigger=PropertyChanged}"/>
    <TextBox x:Name="passwordTextBox" Text="{Binding password, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>  

它应该是一个非常简单的注册页面,管理员可以通过简单地滚动,点击批准按钮或点击拒绝按钮来批准和拒绝注册。

事情是我使用MVVM模式。这意味着上面的textBoxes绑定的属性位于collectionViewSource类中,这是我的问题所在。

我需要在“注册”中保存相同的信息。表,到用户表。

  1. 由于textBoxes绑定的属性位于collectionViewSource中,有没有办法从那里获取它们的值?
  2. 我查看了解决方案资源管理器,但没有找到任何名为signupViewSource的实际类。如果它不存在,那么它是如何被引用的,为什么它甚至被称为类?
  3. 在我创建自己的collectionViewSource类之前,它是一个占位符吗?那样会更可行吗?
  4. 我到目前为止尝试的是以下方法,该方法应该将注册表中的信息保存到users表中:

    private object SaveCurrent_CommandExecute(object param)
    {
        myAppEntities context = new myAppEntities();
    
        myApp.signup Signup = new signup();
    
        try
        {
            myApp.user User = new Medcare2.user
            {
                firstname = Signup.first,
                surname = Signup.last,
                username = Signup.username,
                password = Signup.password,
            };
    
            // Persist Changes to database
            context.users.Add(User);
            context.SaveChanges();
            MessageBox.Show("Saved");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }  
    

    上述方法的问题在于它创建了一个新的注册类I实例,因此我抓取的属性中的所有信息都是空的。所以我得到验证错误。基本上。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要在调用Signup命令的任何控件上将所选CommandParameter对象作为SaveCurrent传递。然后,您可以将object param转发回Signup并从中提取值。