如何使用数据库从WPF MVVM中的DataGrid中选择数据

时间:2019-11-29 06:40:10

标签: wpf mvvm datagrid mvvm-light

我正在用mvvm light在wpf中工作。我想从数据网格中选择数据并将其放在文本框中。 我尝试了可能的解决方案,但没有用。所以希望从这里获得解决方案。

让我解释一下我的项目方案。

UI:

<Grid ShowGridLines="True">  
    <Grid.RowDefinitions>  
        <RowDefinition></RowDefinition>  
        <RowDefinition></RowDefinition>  
    </Grid.RowDefinitions>  
    <StackPanel Orientation="Vertical" HorizontalAlignment="Center"  
                Grid.Row="0"   
                VerticalAlignment="Center">  
        <StackPanel Orientation="Horizontal" Margin="0,0,0,10">  
            <TextBlock Name="name" Text="Name:" Margin="0,0,30,0"></TextBlock>  
            <TextBox x:Name="text1"   
                     Text="{Binding UserLoginData.Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  
                     Width="100"></TextBox>  
        </StackPanel>  

        <StackPanel Orientation="Horizontal" Margin="0,0,0,10">  
            <TextBlock Name="password" Text="Password:" Margin="0,0,12,0"></TextBlock>  
            <TextBox x:Name="text2"   
                     Text="{Binding UserLoginData.Password,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  
                     Width="100"></TextBox>  
        </StackPanel>  

        <StackPanel Orientation="Horizontal" Margin="0,0,0,0">  
            <Button Content="Login" Margin="0,0,25,0" Padding="5"  
                    Command="{Binding SaveCommand}">  
            </Button>                  
        </StackPanel>  
    </StackPanel>  

    <DataGrid Grid.Row="1" x:Name="MainDataGrid"  
            ItemsSource="{Binding users}"   
              SelectedItem="{Binding Path=SelectedUsers,Mode=TwoWay}" SelectionChanged="MainDataGrid_SelectionChanged">  
    </DataGrid>  
</Grid>    

我在这里有两个文本框,名称和密码。当我们为该文本框提供值时,该值在我的数据库中保存,并添加到Datagrid中,如下图所示。

DataGrid

现在我想要的是,当我们从Datagrid中选择一个数据时,应该将其添加到两个文本框中,以便我可以执行更新,删除操作。但是在这里,当我选择时,我无法从文本框中的datagrid获取数据。

我在这里为您提供我的视图模型,数据上下文和模型类。因此您可以从中找到解决方案。

查看模型类:

public class UserLoginViewModel:ViewModelBase  
{  

    public UserLoginViewModel()  
    {  
        UserLoginData = new UserLoginData();  
        users = new ObservableCollection<UserLoginData>(GetUsers());  
    }  

    internal IEnumerable<UserLoginData> GetUsers()  
    {  
        DataBaseContext baseContext = new DataBaseContext();  
        return baseContext.userLogins.ToList();  
    }  

    private ObservableCollection<UserLoginData> _SelectedUsers;  
    public ObservableCollection<UserLoginData> SelectedUsers  
    {  
        get => _SelectedUsers;  
        set  
        {  
            if(value != _SelectedUsers)  
            {  
                _SelectedUsers = value;  
                RaisePropertyChanged();  
            }  
        }  
    }  

    private ObservableCollection<UserLoginData> _users;  
    public ObservableCollection<UserLoginData> users  
    {  
        get => _users;  
        set { _users = value; RaisePropertyChanged(); }  
    }  

    private UserLoginData _UserLoginData;  
    public UserLoginData UserLoginData  
    {  
        get => _UserLoginData;  
        set { _UserLoginData = value; RaisePropertyChanged(); }  
    }  

    public ICommand SaveCommand => new RelayCommand(SaveData);  

    public object ObservableCollectoin { get; private set; }  

    private void SaveData()  
    {  
        DataBaseContext baseContext = new DataBaseContext();  
        baseContext.userLogins.Add(UserLoginData);  
        baseContext.SaveChanges();  
    }           
    }          
}  

数据上下文:

     public class DataBaseContext: DbContext  
   {  
       public DataBaseContext() : base("DbBindingContext")  
       {  
       }  

       public DbSet<UserLoginData> userLogins { get; set; }  
   }  

型号:

public class UserLoginData  
   {  
       [Key]  
       public int Id { get; set; }  
       public string Name { get; set; }  
       public string Password { get; set; }  
   }      

告诉我我错了,应该怎么做。

希望可以得到更好的解决方案。 预先感谢。

0 个答案:

没有答案