WPF Привязка текстового поля к текущей выбранной строке таблицы данных - PullRequest
0 голосов
/ 07 декабря 2011

Я посмотрел и не могу найти то, что ищу. У меня есть среда MVVM. В модели View у меня есть Datatable, доступный по данным из соединения / запроса к базе данных. Я выставил свойство (getter / setter) как «DataView» на основе «TheTable.DefaultView».

У меня есть сетка данных в окне, которая привязывается к просмотру данных ... нет проблем.

<DataGrid AutoGenerateColumns="False" 
   Name="dataMyData"
   ItemsSource="{Binding Path=ViewModelViewProperty, 
   NotifyOnSourceUpdated=True, 
   NotifyOnTargetUpdated=True}"
   SelectedItem="{Binding Path=JustOneRecordInView, Mode=TwoWay}"
   SelectionMode="Single"
   SelectionUnit="FullRow"
   GridLinesVisibility="Horizontal"
   CanUserDeleteRows="False"
   CanUserAddRows="False" >

Для "SelectedItem", описанного выше, оно также происходит от свойства, представленного в ViewModel через его (getter / setter).

Теперь моя проблема. Когда я прокручиваю вниз список записей в сетке данных, у меня появляются другие элементы управления текстовым полем, чтобы показать больше данных, чем предоставляет только лист сетки. Я хочу иметь возможность редактировать данные «текущей строки», поэтому у меня есть текстовое поле с таким количеством настроек, сколько я могу придумать, но что-то все еще не в порядке.

<TextBox 
   Text="{Binding Path=PropertyForCurrentRecord[SpecificColumnInDataViewRow], 
        Mode=TwoWay, 
        UpdateSourceTrigger=PropertyChanged, 
        ValidatesOnDataErrors=True, 
        ValidatesOnExceptions=True,
        BindsDirectlyToSource=True,
        NotifyOnSourceUpdated=True,
        NotifyOnTargetUpdated=True,
        NotifyOnValidationError=True}"
    Name="textBox1" VerticalAlignment="Top" Width="40" />

Если я прокручиваю хотя и нахожусь в режиме редактирования данных и изменяю значение в текстовом поле, связанном с текущей строкой, И это значение является одним из столбцов, отображаемых в сетке, сама сетка данных НЕ отображается измененное значение. Однако, если я продолжу прокручивать и возвращаться к одной и той же записи, значение в текстовом поле ДА будет отображать измененное значение.

Итак, как я могу сделать так, чтобы источник данных сетки тоже считался обновленным, так как изменился отдельный столбец из конкретной строки и обновилась и сама сетка. Спасибо ...

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Ух ты ... после еще нескольких копаний из предыдущих дней я наконец взломал его и вот как я это исправил.

private bool AcceptingTheChanges = false;
private DataRowView myRecord;
public DataRowView MyRecord
{
   get { return myRecord; }
   set {
          if (myRecord != null)
                myRecord.Row.Table.AcceptChanges();

          // Now, get the incoming value and re-store into private
          myRecord = value;
          // Finally, raise event that it changed to refresh window...
          RaisePropertyChanged("MyRecord");
       }
}
0 голосов
/ 07 декабря 2011

Ваша сетка данных привязана к коллекции некоторых элементов типа SomeType. Чтобы выполнить задачу, вам нужно реализовать INotifyPropertyChanged в SomeType (или наследовать от ViewModelBase, если он у вас есть). Вы можете посмотреть хороший образец здесь: http://www.hightech.ir/SeeSharp/best-implementation-of-inotifypropertychange-ever

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...