Wpf mvvmlight получает значения из выбранной строки в текстовом поле
У меня есть большая проблема, чтобы получить значения из выбранной строки datagrid в текстовые поля.
Пользователь должен выбрать одну строку, и представление должно получить значения из строки в определенном текстовом поле. После этого пользователь может внести изменения внутри текстового поля и обновить базу данных. После нескольких часов работы на Youtube tutorials и Google у меня все еще нет никакой идеи, как я могу добраться до точки (значения из выбранной строки в текстовом поле). Пожалуйста, помогите мне
Ниже приведен код для View и ViewModel
элемент управления UserControl:
<!--Database datagrid--> <materialDesign:Card Margin="5"> <DataGrid x:Name="MachineDataGrid" AutoGenerateColumns="False" MaxHeight="750" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" ItemsSource="{Binding DataContext}"> <DataGrid.Columns> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgMachineID}" Binding="{Binding MachineID, Mode=TwoWay}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgCustomerId}" Binding="{Binding CustomerID}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgCustomerName}" Binding="{Binding CustomerName}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgCity}" Binding="{Binding City}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgCountry}" Binding="{Binding Country}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgSpindleC1}" Binding="{Binding SpindleC1}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgSpindleC2}" Binding="{Binding SpindleC2}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgHoningHead}" Binding="{Binding HoningHead}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgNCVersion}" Binding="{Binding NCVersion}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgHMIVersion}" Binding="{Binding HMIVersion}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgHRIVersion}" Binding="{Binding HRIVersion}"/> <materialDesign:DataGridTextColumn Header="{x:Static language:Lang.DgAHSVersion}" Binding="{Binding AHSVersion}"/> </DataGrid.Columns> </DataGrid> </materialDesign:Card>
модель представления:
//Operation button for save, update, delete and print public ICommand SaveCommand { get; private set; } public ICommand UpdateCommand { get; private set; } public ICommand DeleteCommand { get; private set; } public ICommand PrintCommand { get; private set; } public ICommand ShowAdvCommand { get; private set; } public ObservableCollection<Machine> DataContext { get; set; } public Machine MachineSelectedItem { get; set; } public object MachineDataGrid { get; private set; } //Datagrid string //PRWContext for general use private PRWContext context = new PRWContext(); public MachineViewModel() { //Commands for save, update, delete and print SaveCommand = new RelayCommand(() => ExecuteSaveCommand()); UpdateCommand = new RelayCommand(() => ExecuteUpdateCommand()); DeleteCommand = new RelayCommand(() => ExecuteDeleteCommand()); PrintCommand = new RelayCommand(() => ExecutePrintCommand()); ////Load the data from PRW Database to datagrid LoadData(); } private void ExecuteSaveCommand() { Machine machine = new Machine { //Machine data MachineID = MachineID, CustomerID = CustomerID, CustomerName = CustomerName, City = City, Country = Country, //Serial data SpindleC1 = SpindleC1, SpindleC2 = SpindleC2, HoningHead = HoningHead, //Softwareversion data NCVersion = NCVersion, HMIVersion = HMIVersion, HRIVersion = HRIVersion, AHSVersion = AHSVersion }; context.Machines.Add(machine); context.SaveChanges(); ClearText(); } private void ExecuteUpdateCommand() { Machine machine = context.Machines.FirstOrDefault(w => w.MachineID == MachineID); machine.CustomerID = CustomerID; machine.CustomerName = CustomerName; context.SaveChanges(); ClearText(); } private void ExecuteDeleteCommand() { throw new NotImplementedException(); } private void ExecutePrintCommand() { throw new NotImplementedException(); } //Load data from database to grid private void LoadData() { context.Machines.Load(); this.DataContext = context.Machines.Local; } //Clear textboxes private void ClearText() { MachineID = string.Empty; CustomerID = string.Empty; CustomerName = string.Empty; City = string.Empty; Country = string.Empty; SpindleC1 = string.Empty; SpindleC2 = string.Empty; HoningHead = string.Empty; NCVersion = string.Empty; HMIVersion = string.Empty; HRIVersion = string.Empty; AHSVersion = string.Empty; }
Что я уже пробовал:
Я пытаюсь сделать это с помощью eventrigger для команды selectionchanged и нескольких различных способов, которые я видел в других вопросах, но мне не повезло : (