В моем приложении WPF у меня есть сетка данных с элементом управления IntegerUpDown, отображаемым в столбце, и его привязка к свойству в моей модели представления:
<DataGridTemplateColumn Header="Qty">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<toolkit:IntegerUpDown Minimum="1" Maximum="999" Value="{Binding SelectedQuantity, Mode=TwoWay}" Increment="1" HorizontalAlignment="Left" Margin="0,0,0,0" Name="integerUpDown1" VerticalAlignment="Top" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Похоже, что это только 1 способ связывания. Значение, изначально установленное в моей модели представления, отображается в элементе управления, но когда я изменяю значение элемента управления, оно не обновляет модель представления. Я удостоверился, что изменил значение элемента управления, затем нажми вкладку или ввод, чтобы потерять фокус и запустить обновление, но все равно не повезло. Моя модель представления довольно проста, и вот свойство SelectedQuantity
public int SelectedQuantity
{
get
{
return _selectedQuantity;
}
set
{
if (value != _selectedQuantity)
{
_selectedQuantity = value;
OnPropertyChanged("SelectedQuantity");
}
}
}
private int _selectedQuantity;
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
Может, это как-то связано с Automapper? Я использую Automapper для сопоставления моей модели с моей моделью представления. Сначала я подумал, что, возможно, мне нужно использовать Automappers "Ignore" для этого свойства, но после попытки решить эту проблему не удалось. SelectedQuantity не является свойством в моем объекте модели. Может быть, это как-то связано с DataGridTemplateColumns?
Редактировать
Похоже, что на самом деле ничто не связано правильно с сеткой данных (хотя другие элементы управления в представлении связаны правильно) :( Вот как я заполняю свой ObservableCollection<ProductViewModel>
объект
public void Search()
{
_viewModel.SearchResults.Clear();
List<ProductViewModel> searchResults = Mapper.Map<List<Product>, List<ProductViewModel>>(_productService.SearchProducts(_viewModel.SearchValue));
foreach (ProductViewModel pvm in searchResults)
{
_viewModel.SearchResults.Add(pvm);
}
}
Редактировать 2:
Моя DataGrid привязана к объекту ObservableCollection<ProductViewModel>
следующим образом: ItemsSource="{Binding SearchResults}"
Я правильно вижу элементы в DataGrid, изменения просто не отражаются в модели представления. SelectedQuantity - это свойство в ProductViewModel.