在我的WPF应用程序,我有一列显示的IntegerUpDown控制与其绑定的属性在我的视图模型一个DataGrid: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将我的模型映射到viewmodel。我最初以为我可能需要在这个属性上使用Automappers“Ignore”,但在尝试后仍然存在相同的问题。 SelectedQuantity不是我模型对象中的属性。也许它与DataGridTemplateColumns有关?
编辑 看起来没有什么实际使用DataGrid正确绑定(虽然在查看其他控件正确绑定):(这是我如何填充我的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中的一个属性。
有没有被绑定到DataGrid的集合?如果是的话,SelectedQuantity是绑定集合中的对象的成员,还是在托管DataGrid的窗口/控件的视图模型中? – Josh 2012-03-21 16:45:23
@Josh请参阅编辑2 – 2012-03-21 16:51:17