如何将自定义类集合绑定到 WPF 数据网格组合框(多选)

本文关键字:组合 网格 数据网 多选 数据 WPF 自定义 集合 绑定 | 更新日期: 2023-09-27 18:36:24

请帮助我弄清楚如何将自定义类集合绑定到数据网格组合框。我的自定义类是

class Test: INotifyPropertyChanged
{
    public String Name { get; set; }
    public UserAvailableValue SelectedAvailableValue { get; set; }
    public ObservableCollection<UserAvailableValue> AvailableValues { get;  set; }
    public ObservableCollection<String> DefaultValues { get;  set; }
    public String SelectedValue { get; set; }
    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
public class UserAvailableValue 
{
    public Object Value { get; set; }
    public Object Label { get; set; }
}

从代码隐藏中,我正在设置 DataGrid 数据上下文,例如

   ObservableCollection<Test> UIParams = new ObservableCollection<Test>();
   // code to fill UIParams collection
   dgReportparameters.DataContext = UIParams; 
   //XAML Code
   <DataGrid Name="dgReportparameters" ItemsSource="{Binding}"
               AutoGenerateColumns="False">
     <DataGrid.Columns>
     <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
     <DataGridComboBoxColumn Header="Available Values" SelectedItemBinding=
      "{Binding SelectedAvailableValue, UpdateSourceTrigger=PropertyChanged}" 
       DisplayMemberPath="Label">
        <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="ComboBox">
        <Setter Property="ItemsSource" Value="{Binding Path=AvailableValues, 
         RelativeSource={RelativeSource AncestorType=Window}}" />
         </Style>
        </DataGridComboBoxColumn.ElementStyle>
      </DataGridComboBoxColumn>
   <DataGridTextColumn Header="Default Values" Binding="{Binding SelectedValue}"/>
   <DataGridCheckBoxColumn Header="Nullable" Binding="{Binding IsNullable}"/>
 </DataGrid.Columns>
</DataGrid>

除了 DataGridComboBoxColumn 之外,其他列都显示正确的值。DataGridComboBoxColumn 显示空白列。UIParams 集合具有多个参数,而每个参数具有名称和可用值以及一个默认值。我想在数据网格中显示参数,并让用户从可用列组合框中选择一个或多个值。每个参数都有自己的一组可用值。我找到的大多数示例在下拉列表中都有 Common 集合,但就我而言,数据网格的每一行都有不同的可用值。

请帮助我在数据网格中拥有组合框。

提前谢谢。

如何将自定义类集合绑定到 WPF 数据网格组合框(多选)

您的组合框样式是错误的。ItemsSource 设置为 Window,而从模型中,您不需要设置 AncestorType。

只需{绑定}就足够了。实际上,您不需要 ItemsSource Setter,因为您只是在定义组合框的样式。仅当您将 ItemsSource 修改为其他内容时,才需要它。在您的情况下,它不是。

编辑:看看这个例子: 绑定项WPF DataGrid 中 ComboBoxColumn 的来源我不明白您在顶级中的每个数据项中都有可用值集合的要求,如下所示。

public class MyClass
{
public List<Test> Items{get;set;}
public List<AvailableValue> AvailableValues { get;set;}
}

我还注意到您已经实现了INotifyPropertyChanged接口,并且没有在每个属性集上引发更改事件。

我建议您在开始处理WPF和INotifyPropertyChanged接口之前先学习一些基础知识。

这对

我有帮助。

    <DataGridComboBoxColumn Header="Available Values" SelectedItemBinding=
                 "{Binding SelectedAvailableValue, UpdateSourceTrigger=PropertyChanged}"                     
                 DisplayMemberPath="Label">
            <DataGridComboBoxColumn.EditingElementStyle>
               <Style TargetType="ComboBox">
                  <Setter Property="ItemsSource" Value="{Binding Path=AvailableValues}" />
               </Style>
            </DataGridComboBoxColumn.EditingElementStyle>
  </DataGridComboBoxColumn>