Fehr Benjamin Ответов: 1

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 и нескольких различных способов, которые я видел в других вопросах, но мне не повезло : (

1 Ответов

Рейтинг:
2

#realJSOP

0) называть вашу наблюдаемую коллекцию "DataContext" - плохая идея, потому что именно это имя форма использует для своего свойства контекста данных. Все может стать очень запутанным, очень быстро.

1) Вы должны привязать свои текстовые поля к свойствам в выбранном элементе сетки. В форме создайте новое свойство, представляющее текущий выбранный элемент, чтобы сделать это проще.