我有一个带有Product,Serial No列的数据网格,其中SerialNo是DatagridComboboxColumn。我想填充序列no combobox当根据产品ID动态选择产品时。 我的Xaml是:
<my:DataGrid Name="dgSales" ItemsSource="{Binding}" SelectionUnit="Cell" AutoGenerateColumns="False" >
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="Product" Visibility="Hidden" Binding="{Binding ProductName}"></my:DataGridTextColumn>
<my:DataGridComboBoxColumn Header="Serial No" Width="135"
SelectedValueBinding="{Binding SerialNo}"
SelectedValuePath="SlRecord_Id"
DisplayMemberPath="SlNum"
>
<my:DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding}" />
</Style>
</my:DataGridComboBoxColumn.ElementStyle>
<my:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding}" />
</Style>
</my:DataGridComboBoxColumn.EditingElementStyle>
</my:DataGridComboBoxColumn>
</my:DataGrid.Columns>
</my:DataGrid>
我的DataObject是:
class clsSalesItems : INotifyPropertyChanged, IDataErrorInfo
{
private string _ProductName;
private string _SerialNo;
private ObservableCollection<ModelNos> _SerialNos;
public string ProductName
{
get { return _ProductName; }
set
{
_ProductName = value;
OnPropertyChanged("ProductName");
}
}
public ObservableCollection<ModelNos> SerialNos
{
get
{
return _SerialNos;
}
set
{
_SerialNos = value;
OnPropertyChanged("SerialNos");
}
}
}
我的SerialNo类是:
public class ModelNos
{
private int _SlRecord_Id;
private string _SlNo;
public int SlRecord_Id
{
get { return _SlRecord_Id; }
set
{
_SlRecord_Id = value;
}
}
public string SlNum
{
get { return _SlNo; }
set
{
_SlNo = value;
}
}
}
现在我的问题是我想在动态选择产品时填充Serial no combobox列(每个产品的序列号不同)。如何在选择产品时绑定Serial no combobox?
答案 0 :(得分:1)
监听DataGrid的SelectedItem属性,或者更好地说将该属性绑定到ViewModel中的属性。当您在DataGrid中选择一行时,将调用ViewModel中属性的setter,您可以在那里检查新值,并根据它设置SerialNos属性。设置SerialNos后,将触发PropertyChanged事件,该事件将告诉DataGrid ComboBox的ItemsSource已刷新。 DataGrid将进一步使用新值填充ComboBox。
其纯View-ViewModel-Model模式。这些问题只能通过使用MVVM来解决,而不是在视图中捕获一些事件并在后面的代码中处理它们。