如何填充DataGridComboBoxColumn? [英] How to populate a DataGridComboBoxColumn?

查看:77
本文介绍了如何填充DataGridComboBoxColumn?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个DataGrid,其中一列是DataGridComboBoxColumn:

 < DataGrid AutoGenerateColumns ="False" CanUserAddRows ="True">< DataGrid.Columns>< DataGridTextColumn Header =用户名" Width =自动" Binding ="{Binding UName}"/>< DataGridComboBoxColumn Header ="Country" Width ="Auto" ????/></DataGrid.Columns></DataGrid> 

我有一个国家/地区课程:

 公共类国家/地区{公共字符串名称{get;放;}公共字符串des {get;放;}公共Country(){}公共国家(字符串n,字符串d){this.name = n;this.des = d;}} 

他们有一个名称和描述,我希望(多个Country对象的)名称填充组合框(以及每个组合框选项的des提示),我该怎么做?

注意:稍后,我想使用户能够添加新的国家/地区,因此我希望组合框也进行更改(以包括新的国家/地区),这意味着解决方案需要允许这样做./p>

注2:我没有使用MVVM模式.意味着它不是重复的.

解决方案

解决方案:1. XAML:

 < DataGrid x:Name ="DataGrid" AutoGenerateColumns ="False" CanUserAddRows ="True">< DataGrid.Columns>< DataGridTextColumn Header =用户UName"宽度=自动" Binding ="{Binding UName}"/>< DataGridComboBoxColumn x:Name ="ComboBoxColumn" Header ="Country" Width ="Auto" DisplayMemberPath ="name" SelectedItemBinding ="{Binding CountryData}"/></DataGrid.Columns></DataGrid> 

2.后面的代码:

 公共局部类MainWindow:Window{公共MainWindow(){InitializeComponent();InitData();ComboBoxColumn.ItemsSource =国家/地区集合;DataGrid.ItemsSource = UsersCollection;}私有void InitData(){UsersCollection = new ObservableCollection< UserData>(new List< UserData>{新的UserData{UName ="Greg",},新的UserData{UName =乔",},新的UserData{UName ="Iv",}});StatesCollection =新的ObservableCollection< Country>(新List< Country>{新国家("Ger","1500"),新国家("Fra","1500"),新国家("Ru","1500"),新国家(贝尔","1500"),});}公共ObservableCollection< Country>CountryCollection {get;放;}公共ObservableCollection< UserData>UsersCollection {get;放;}} 

3.用户模型:

 公共类UserData{公共字符串UName {get;放;}公共对象CountryData {get;放;}} 

4.工具提示支持:用下一个xaml代码替换所需的组合框列:

 < DataGridComboBoxColumn x:Name ="ComboBoxColumn"标头="Country" DisplayMemberPath ="CountryName"ItemsSource ="{StaticResource StatesArray}" Width ="Auto"SelectedItemBinding ="{绑定CountryData,UpdateSourceTrigger = PropertyChanged}">< DataGridComboBoxColumn.CellStyle>< Style TargetType ="DataGridCell">< Setter Property ="ToolTip">< Setter.Value>< ContentControl Content ="{Binding}">< ContentControl.ContentTemplate>< DataTemplate DataType ="{x:Type soDataGridProjectsHelpAttempt:UserData}">< DataTemplate.Resources>< system:String x:Key ="NoAnyEntriesKey">没有显示任何条目</system:String></DataTemplate.Resources>< TextBlock Text ="{Binding CountryData.Description,FallbackValue = {StaticResource NoAnyEntriesKey}}"></TextBlock></DataTemplate></ContentControl.ContentTemplate></ContentControl></Setter.Value></Setter></样式></DataGridComboBoxColumn.CellStyle></DataGridComboBoxColumn> 

并考虑到您需要扩展具有描述属性的国家/地区"模型.

致谢

I have a DataGrid, one of the columns is a DataGridComboBoxColumn:

 <DataGrid AutoGenerateColumns="False" CanUserAddRows="True">
     <DataGrid.Columns>
           <DataGridTextColumn Header="User Name" Width="Auto" Binding="{Binding UName}"/>
           <DataGridComboBoxColumn Header="Country" Width="Auto" ????/>
     </DataGrid.Columns>
 </DataGrid>

I have a Country class:

public class Country{
  public string name {get; set;}
  public string des {get; set;}
  public Country() {}
  public Country(string n, string d) {
      this.name = n;
      this.des = d;
  }
}    

they have a name and a description, I want the names(of multiple Country objects) to populate the combo-box(and the des the tooltip of each combo-box option), how do I do that?

Note: later I would like to give the user the ability to add a new Country, so I would like the combo-box to change as well(to include the new Country), meaning the solution needs to allow that.

Note2: I am not using the MVVM pattern. edit: meaning it is not a duplicate.

解决方案

Solution: 1. XAML:

<DataGrid x:Name="DataGrid" AutoGenerateColumns="False" CanUserAddRows="True">
        <DataGrid.Columns>
            <DataGridTextColumn     Header="User UName" Width="Auto" Binding="{Binding UName}"/>
            <DataGridComboBoxColumn x:Name="ComboBoxColumn" Header="Country" Width="Auto" DisplayMemberPath="name" SelectedItemBinding="{Binding CountryData}"/>
        </DataGrid.Columns>
    </DataGrid>

2. Code behind:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        InitData();
        ComboBoxColumn.ItemsSource = CountriesCollection;
        DataGrid.ItemsSource = UsersCollection;
    }

    private void InitData()
    {
        UsersCollection = new ObservableCollection<UserData>(new List<UserData>
        {
            new UserData
            {
                UName = "Greg",
            },
            new UserData
            {
                UName = "Joe",
            },
             new UserData
            {
                UName = "Iv",
            }
        });
        CountriesCollection = new ObservableCollection<Country>(new List<Country>
        {
            new Country("Ger", "1500"),
            new Country("Fra", "1500"),
            new Country("Ru", "1500"),
            new Country("Bel", "1500"),
        });
    }

    public ObservableCollection<Country> CountriesCollection { get; set; }

    public ObservableCollection<UserData> UsersCollection { get; set; }
}

3. User model:

 public class UserData
{
    public string UName { get; set; }

    public object CountryData { get; set; }
}

4. tool tip support: replace a desired combo box column with next xaml code:

 <DataGridComboBoxColumn x:Name="ComboBoxColumn" Header="Country" DisplayMemberPath="CountryName"
                                    ItemsSource="{StaticResource CountriesArray}" Width="Auto"
                                    SelectedItemBinding="{Binding CountryData, UpdateSourceTrigger=PropertyChanged}">
                <DataGridComboBoxColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="ToolTip">
                            <Setter.Value>
                                <ContentControl Content="{Binding }">
                                    <ContentControl.ContentTemplate>
                                        <DataTemplate DataType="{x:Type soDataGridProjectsHelpAttempt:UserData}">
                                            <DataTemplate.Resources>
                                                <system:String x:Key="NoAnyEntriesKey">
                                                    No any entry presented
                                                </system:String>
                                            </DataTemplate.Resources>
                                            <TextBlock Text="{Binding CountryData.Description, FallbackValue={StaticResource NoAnyEntriesKey}}"></TextBlock>
                                        </DataTemplate>
                                    </ContentControl.ContentTemplate>
                                </ContentControl>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGridComboBoxColumn.CellStyle>
            </DataGridComboBoxColumn>

and take in account you nedd to extend Country model with description property.

regards,

这篇关于如何填充DataGridComboBoxColumn?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆