2014-10-28 34 views
0

您知道何时将dataSources窗口中的表拖放到usercontrol? Visual Studio会自动创建一个datacontext(在视图的xaml中)以绑定页面上的新元素。此dataContext设置为collectionViewSource,此collectionViewSource从数据集中绘制其信息。从拖放时拿走表格的相同数据集。使用linq将表中的行保存到另一个表中

在我的情况下这是它创建:

<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类中,这是我的问题开始的地方。

我需要将这个相同的信息从'注册'表保存到users表中。

  1. 由于textBoxes绑定的属性在collectionViewSource中,有没有什么办法从那里获取它们的值?
  2. 我通过解决方案资源管理器查看,没有找到任何实际的类叫做signupViewSource。如果它不存在,那么它是如何被引用的,为什么它甚至被称为一个类?
  3. 它是一个占位符,直到我创建我自己的collectionViewSource类?这样可行吗?

我已经试过到目前为止是应该保存从注册等表的用户表的信息下面的方法:

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); 
    } 
} 

上述方法的问题在于,它创造一个我正在保存的注册类的新实例,所以我抓取的属性中的所有信息都是空的。所以我得到验证错误。基本上。任何帮助将非常感激。

回答

1

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

+0

正确,如果你想传递完整的对象,然后使用'CommandParameter =“{绑定路径=。}” – XAMlMAX 2014-10-28 15:17:29

相关问题