我正在寻找解决方案已经有一段时间没有运气了,希望我能在这里得到专家的帮助。
例如,我有一个Product类:
public class ProductModel : ObservableObject
{
private int id;
public int Id
{
get { return id; }
set { id = value; OnPropertyChanged("Id"); }
}
private string name;
public string Name
{
get { return name; }
set { name = value; OnPropertyChanged("Name"); }
}
private decimal unitPrice;
public decimal UnitPrice
{
get { return unitPrice; }
set { unitPrice = value; OnPropertyChanged("UnitPrice"); }
}
}
我有另一个名为Order的课程:
public class Order : ObservableObject
{
SportsEntities db;
private int id;
public int Id
{
get { return id; }
set { id = value; OnPropertyChanged("Id"); }
}
private int productId;
public int ProductId
{
get { return productId; }
set
{
productId = value;
UnitPrice = db.Products.First(x => x.Id == value).UnitPrice;
OnPropertyChanged("ProductId");
OnPropertyChanged("UnitPrice");
}
}
private decimal unitPrice;
public decimal UnitPrice
{
get { return unitPrice; }
set { unitPrice = value; OnPropertyChanged("UnitPrice"); }
}
public Order()
{
db = new SportsEntities();
}
}
在View中,我将ObservableCollection从ViewModel绑定到带有2列的DataGrid - " Product"和"单价"。 '产品' column是DataSridComboBoxColumn,ItemsSource绑定到ObservableCollection。
我可以选择产品并在完成行编辑后获得单价。但是,我真正想要的是在我仍在更新行时选择产品后立即更新单价列。
有人可以提供建议吗?谢谢。
增加:
查看
<DataGrid ItemsSource="{Binding Orders}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridComboBoxColumn Width="120" Header="Product" SelectedValueBinding=" {Binding ProductId}"
DisplayMemberPath="Name" SelectedValuePath="Id">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding DataContext.Products, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding DataContext.Products, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Width="80" Header="Unit Price" Binding="{Binding UnitPrice}" />
</DataGrid.Columns>
</DataGrid>
视图模型
public class MainViewModel : ViewModelBase
{
private SportsEntities db;
private ObservableCollection<ProductModel> products;
public ObservableCollection<ProductModel> Products
{
get { return products; }
set { products = value; OnPropertyChanged("Products"); }
}
private ObservableCollection<Order> orders;
public ObservableCollection<Order> Orders
{
get { return orders; }
set { orders = value; OnPropertyChanged("Orders"); }
}
public MainViewModel()
{
Initialized();
}
private void Initialized()
{
db = new SportsEntities();
Products = new ObservableCollection<ProductModel>();
foreach (Product p in db.Products)
{
Products.Add(new ProductModel { Id = p.Id, Name = p.Name, UnitPrice = p.UnitPrice });
}
Orders = new ObservableCollection<Order>();
}
}