我使用的是C# WPF
我有一个Datagrid,其中填充了一个可观察的集合,该集合名为:“ALLTASKLIST”填充从数据库中选择数据
我使用DataBinding在DataGrid中显示“ALLTASKLIST”中的数据
但它是空的!
XAML文件:<DataGrid.Columns>
<DataGridComboBoxColumn Header="CMB">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=ALLTASKLIST}" />
<Setter Property="DisplayMemberPath" Value="NAMES" />
<Setter Property="SelectedValuePath" Value="CODE" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
后面的代码:
public partial class MainWindow : Window
{
NEGIN1401Entities dbms = null;
public class ThePart1 : INotifyPropertyChanged
{
private int? _CODE;
private string _NAMES;
private int? _KIND;
private int? _idd;
public int? CODE
{
get { return _CODE; }
set
{
_CODE = value;
OnPropertyChanged("CODE");
}
}
public string NAMES
{
get { return _NAMES; }
set
{
_NAMES = value;
OnPropertyChanged("NAMES");
}
}
public int? KIND
{
get { return _KIND; }
set
{
_KIND = value;
OnPropertyChanged("KIND");
}
}
public int? idd
{
get { return _idd; }
set
{
_idd = value;
OnPropertyChanged("idd");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string strCaller = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(strCaller));
}
}
//public ObservableCollection<ThePart1> ALLTASKLIST { get; set; }
public ObservableCollection<ThePart1> ALLTASKLIST = new ObservableCollection<ThePart1>();
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
dbms = new NEGIN1401Entities(Publications.TheENTTConnectionString);
ALLTASKLIST = dbms.Database.SqlQuery<ThePart1>("SELECT * FROM TCOD_ANBAR").ToObservableCollection();
var IsHaveItems = ALLTASKLIST.Count;//it will be 6 Items
//MainDatagrid.ItemsSource = ALLTASKLIST;
}
}
数据网格的项目:enter image description here
结果:enter image description here
2条答案
按热度按时间ulydmbyx1#
1.绑定路径需要属性,而不是字段。
1.您的样式将在行级别设置ComboBox的值,并且数据上下文将是集合元素ThePart1,而不是MainWindow。因此,绑定路径将相对于没有ALLTASKLIST属性的ThePart1进行解释。
请尝试以下示例:
第一个
我不明白你的第二点,你能说得更清楚些吗?
为便于理解,请尝试添加此列:
非常感谢,但只有一件事还没有工作!它是组合框!无法在DataGridTemplateColumn或组合框列的绑定中访问它
没有看到您的代码,我无法判断问题的原因。
我做了一个简单的例子来演示创建和绑定ComboBox列的不同方法。考虑这个例子。也许你会发现一些对你有用的东西,你自己也会明白错误的原因。
第一个
注意第二列--它不是由于绑定错误而创建的,这正是我在第3点中所写的。
niwlg2el2#
首先你应该绑定到属性,而不是字段。
对此
我认为您在使用DataGrid的
DataContext
时遇到了问题。请尝试在XAML中直接将其设置为DataGrid,方法是在XAML中创建一个MainWindow的本地示例。(请参阅EldHasp的问题)此外,尝试将
UpdateSourceTrigger
属性设置为PropertyChanged
,因为可能列已更新,但如果没有焦点,则无法简单地查看更新。将DataGrid
的AutoGenerateColumns
属性设置为false
,这样就不会创建新列。