如何填充DataGridComboBoxColumn? [英] How to populate a 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屋!