Привязать пользовательский ввод текстового поля из ячеек сетки данных - PullRequest
0 голосов
/ 28 июня 2019

У меня есть довольно простое приложение CRUD, которое отображает данные из базы данных в сетке данных.Это отлично работает.Я хотел бы иметь столбец комментариев в таблице данных, где каждая строка имеет текстовое поле, в которое пользователь может вставить комментарий.Проблема в том, что свойство в классе, отображающее данные, не обновляется с комментарием.Я могу использовать простой DataGridTextColumn с IsReadonly = "False" для этого столбца.Это на самом деле получает комментарии, но выглядит ужасно, и пользователь должен дважды щелкнуть ячейку, чтобы войти в нее.В текстовом поле проверка выглядит более плавно, и пользователь должен нажать только один раз, чтобы ввести его, но здесь привязка не работает.Я пробовал разные варианты DataGridTemplateColumn, но я не могу понять, как это правильно или найти рабочий пример.Чего мне не хватает?

<DataGridTemplateColumn Header="Comment" Width="120" IsReadOnly="False">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Path=UserComment}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                        <DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <TextBox IsEnabled="true" Text="{Binding Path=UserComment}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellEditingTemplate>
                    </DataGridTemplateColumn>

1 Ответ

0 голосов
/ 28 июня 2019

В вашей ViewModel не забудьте уведомить свойство, измененное после обновления значения. В противном случае представление не знает, что оно должно синхронизироваться.

Элегантный способ реализации INotifyPropertyChanged

Основной способ будет:

private string _userComment;

public string UserComment
{
   get { return _userComment; }
   set 
   {
      _userComment = value;
      PropertyChanged("UserComment");
   }
}

private void PropertyChanged(string prop)
{
   if( PropertyChanged != null )
   {
      PropertyChanged(this, new PropertyChangedEventArgs(prop);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...