WPF 数据网格:动态更改组合框集合

本文关键字:组合 集合 动态 数据 数据网 网格 WPF | 更新日期: 2023-09-27 18:37:04

我有一个数据网格,分别包含产品,序列号无列,其中序列号是DatagridCombobox列.我想填充串行无组合框,当根据产品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>

我的数据对象是:

 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");
        }
    }
}

我的序列号类是:

 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;
        }
    }
}

现在我的问题是我想在动态选择产品时填充"序列号"无组合框列(每个产品的序列号都不同)。选择产品时如何绑定序列号无组合框?

WPF 数据网格:动态更改组合框集合

侦听 DataGrid 的 SelectedItem 属性,或者更好地说,将该属性绑定到 ViewModel 中的属性。当您在 DataGrid 中选择一行时,将调用 ViewModel 中属性的资源库,您可以在其中检查新值,并基于它设置 SerialNos 属性。一旦你设置了 SerialNos,就会触发 PropertyChanged 事件,该事件将告诉 DataGrid ComboBox 的 ItemsSource 已刷新。DataGrid 将进一步用新值填充组合框。

其纯粹的视图-视图模型-模型模式。这些问题应该通过使用 MVVM 来解决,而不是捕获视图中的某些事件并在代码中隐藏处理它们。