【轉】WPF DataGridComboBoxColumn使用


若要填充下拉列表,請首先使用下列選項之一設置 ComboBox 的 ItemsSource 屬性。
靜態資源。 
x:Static 代碼實體。
ComboBoxItem 類型的內聯集合。
實現效果如下:

如需使用非靜態資源,則需要使用DataGridComboBoxColumn的EditingElementStyle樣式修改編輯樣式,通過ElementStyle修改正常顯示(非編輯狀態)樣式。
主要XAML代碼如下:

<DataGrid x:Name="grd" ItemsSource="{Binding StuList3}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding No}" Header="學號"/>
        <DataGridTextColumn Binding="{Binding Name}" Header="姓名"/>
        <!--使用普通List集合-->
        <DataGridComboBoxColumn x:Name="cmb" Header="性別">
            <DataGridComboBoxColumn.EditingElementStyle>
                <Style TargetType="ComboBox">
                    <Setter Property="ItemsSource" Value="{Binding Path=DataContext.SexList,ElementName=grd}" />
                    <Setter Property="DisplayMemberPath" Value="Name" />
                    <Setter Property="SelectedValuePath" Value="Name" />
                    <Setter Property="SelectedValue" Value="{Binding Sex,UpdateSourceTrigger=PropertyChanged}" />
                </Style>
            </DataGridComboBoxColumn.EditingElementStyle>
            <DataGridComboBoxColumn.ElementStyle>
                <Style TargetType="ComboBox">
                    <Setter Property="ItemsSource" Value="{Binding Path=DataContext.SexList,ElementName=grd}" />
                    <Setter Property="DisplayMemberPath" Value="Name" />
                    <Setter Property="SelectedValuePath" Value="Name" />
                    <Setter Property="SelectedValue" Value="{Binding Sex}" />
                </Style>
            </DataGridComboBoxColumn.ElementStyle>
        </DataGridComboBoxColumn>
        <!--使用靜態資源-->
        <DataGridComboBoxColumn Header="性別(靜態資源)" ItemsSource="{Binding Source={StaticResource myEnum}}"
                                TextBinding="{Binding Sex}"
                                SelectedItemBinding="{Binding Sex,UpdateSourceTrigger=PropertyChanged}">
        </DataGridComboBoxColumn>
        <!--使用x:Static擴展標記-->
        <DataGridComboBoxColumn Header="性別(x:Static)" ItemsSource="{x:Static local:ViewModel.SexList2}"
                                TextBinding="{Binding Sex}"
                                SelectedItemBinding="{Binding Sex,UpdateSourceTrigger=PropertyChanged}">
        </DataGridComboBoxColumn>
        <!--使用內聯集合-->
        <DataGridComboBoxColumn Header="性別(內聯集合)"
                                TextBinding="{Binding Sex}"
                                SelectedItemBinding="{Binding Sex,UpdateSourceTrigger=PropertyChanged}">
            <DataGridComboBoxColumn.ItemsSource>
                <col:ArrayList>
                    <sys:String></sys:String>
                    <sys:String></sys:String>
                </col:ArrayList>                       
            </DataGridComboBoxColumn.ItemsSource>
        </DataGridComboBoxColumn>
    </DataGrid.Columns>
</DataGrid>

原文地址:https://blog.csdn.net/rabbitsoft_1987/article/details/22896073

根據上述文章,我試了一下簡化,可以實現效果

前端:(DisplayMemberPath="Name" 這里是顯示 Element的 名字)

<DataGrid Name="grdBeam" ItemsSource="{Binding BeamCollection}" Grid.ColumnSpan="3" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightGray">
                <DataGrid.Columns>
                   <DataGridComboBoxColumn Header="材質" SelectedItemBinding="{Binding BeamMaterial}" DisplayMemberPath="Name" Width="1*">
                        <DataGridComboBoxColumn.EditingElementStyle>
                            <Style TargetType="ComboBox">
                                <Setter Property="ItemsSource" Value="{Binding Path=DataContext.MaterialItems,ElementName=grdBeam}" />
                            </Style>
                        </DataGridComboBoxColumn.EditingElementStyle>
                        <DataGridComboBoxColumn.ElementStyle>
                            <Style TargetType="ComboBox">
                                <Setter Property="ItemsSource" Value="{Binding Path=DataContext.MaterialItems,ElementName=grdBeam}" />
                             </Style>
                        </DataGridComboBoxColumn.ElementStyle>
                    </DataGridComboBoxColumn>
              </DataGrid.Columns>

</DataGrid>

后端:

    public partial class BeamView : Window
    {
        public BeamView()
        {
            InitializeComponent();
            this.DataContext = this;
        }

        public ObservableCollection<BeamGroup> BeamCollection { get; set; } = new ObservableCollection<BeamGroup>();

        /// <summary>
        /// 材料列表
        /// </summary>
        public List<Element> MaterialItems { get; set; } = new List<Element>();
    }
    public class BeamGroup
    {
        public Element BeamMaterial
        {
            get { return _beamMaterial; }
            set
            {
                _beamMaterial = value;
            }
        }
//.....此處省略N多個屬性
private Element _beamMaterial; }

    public class Element
    {
      public string Name { get; set; }
    }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM