【发布时间】:2012-03-21 16:37:21
【问题描述】:
在我的 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>
它似乎只有一种方式绑定。最初在我的视图模型中设置的值显示在控件中,但是当我更改控件的值时,它不会更新视图模型。我确保更改控件的值,然后按 Tab 或 Enter 以失去焦点并触发更新,但仍然没有运气。我的视图模型非常简单,这里是 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 “忽略”,但在尝试后同样的问题仍然存在。 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 中的一个属性。
【问题讨论】:
-
是否有集合绑定到 DataGrid?如果是这样,SelectedQuantity 是绑定集合中对象的成员,还是在托管数据网格的窗口/控件的视图模型中?
标签: wpf data-binding mvvm wpftoolkit