我有一个ObservableCollection,它从一个从Postgres数据库中填充的DataTable中获取数据。我需要将此ObservableCollection绑定到DataGrid中的ComboBoxColumn。我已经看过很多关于如何做到这一点的例子,但我经常遗漏一些东西。
编辑:这是新的更新代码,它正在工作,除了我设置为“名称”(尚未)的INotifyPropertyChanged
namespace Country_namespace
{
public class CountryList : ObservableCollection<CountryName>
{
public CountryList():base()
{
// Make the DataTables and fill them
foreach(DataRow row in country.Rows)
{
Add(new CountryName((string)row.ItemArray[1], (int)row.ItemArray[0]));
}
}
}
public class CountryName: INotifyPropertyChanged
{
private string name;
private int id_country;
public event PropertyChangedEventHandler PropertyChanged;
public CountryName(string country_name, int id)
{
this.name = country_name;
this.id_country = id;
}
public string Name
{
get { return name; }
set {
name = value;
OnPropertyChanged("CountryName");
}
}
public int idcountry
{
get { return id_country; }
set { id_country = value; }
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}
XAML:
xmlns:c="clr-namespace:Country_namespace"
<Windows.Resources>
<c:CountryList x:Key="CountryListData"/>
</Windows.Resources>
DataGrid列:
<dg:DataGridTemplateColumn Header="country">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource CountryListData}}" DisplayMemberPath="Name"></ComboBox>
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
答案 0 :(得分:0)
首先。你可以绑定到公共属性。
country_似乎没有公共财产。
第二,如果绑定不起作用,你总是要先检查datacontext,然后再检查绑定路径。您可以使用Snoop在运行时执行此操作
编辑:
您没有为您的网格发布您的itemssource。所以这里有一些假设。
<DataGrid ItemsSource="{Binding MySource}">
...
<ComboBox ItemsSource="{Binding MySourcePropertyForCountries}"/>
- &GT;当MySource对象项具有公共属性MySourcePropertyForCountries时,这将起作用。
但是如果你想将你的组合框绑定到一个位于MySource对象之外的列表中。那么你必须使用某种relativeSourcebinding或elementbinding。
<DataGrid x:Name="grd" ItemsSource="{Binding MySource}">
...
<ComboBox ItemsSource="{Binding ElementName=grd, Path=DataContext.MyCountries}"/>
- &GT;当datagrid的datacontext具有属性MyCountries
时,这将起作用