C# WPF数据网格绑定到列表<;类型>;
我正在尝试将WPFC# WPF数据网格绑定到列表<;类型>;,c#,wpf,datagrid,C#,Wpf,Datagrid,我正在尝试将WPFDataGrid绑定到列表 下面是我的DataGrid: <DataGrid ItemsSource="{Binding Source=FileProcessing}" AutoGenerateColumns="True"></DataGrid> 文件处理定义为以下属性: public List<FileProcessing_T> FileProcessing { get; set; } 公共列表文件处理{get;set;} GetFi
DataGrid
绑定到列表
下面是我的DataGrid
:
<DataGrid ItemsSource="{Binding Source=FileProcessing}" AutoGenerateColumns="True"></DataGrid>
文件处理
定义为以下属性:
public List<FileProcessing_T> FileProcessing { get; set; }
公共列表文件处理{get;set;}
GetFileProcessingInfo
方法还返回一个List
对象
FileProcessing
列表确实从数据库中获取了一些记录,但网格没有绑定列表中的数据
非常感谢您的帮助。您可以保留您的数据绑定 但是您必须在
FileProcessing
属性所在的类中实现INotfifyPropertyChanged
接口。
因为在文件处理的setter中,您必须执行更改通知
public ObservableCollection<FileProcessing_T> FileProcessing
{
get
{
return _fileProcessing;
}
set
{
if (_fileProcessing != value)
{
_fileProcessing = value;
RaisePropertyChanged("FileProcessing");
}
}
}
ObservableCollection<FileProcessing_T> _fileProcessing;
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
公共ObservableCollection文件处理
{
得到
{
返回文件处理;
}
设置
{
if(_fileProcessing!=值)
{
_文件处理=值;
RaisePropertyChanged(“文件处理”);
}
}
}
可观察收集(文件处理);;
公共事件PropertyChangedEventHandler PropertyChanged=委托{};
public void RaisePropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
}
}
否则,UI控件将不知道(不会得到通知)绑定数据已更改
这将足以解决您的问题。
如果您继续使用List
而不是ObservableCollection
,它甚至会起作用,但是ObservableCollection
也支持更改通知,如果从集合中添加和删除单个元素,而List
则不支持。将List
更改为ObservableCollection
,看看这是否有帮助?是的,可观察收集更好。无论如何,我认为问题在于列表元素的类型与网格不兼容。您可以发布文件处理信息吗?FileProcessing
是一个属性,因此看起来应该是Path
,而不是Source
。当然,源应该是具有属性FileProcessing
的对象。这里的源应该是一个视图模型,并通过DataContext
隐式地沿着树向下流动,我对此进行了备份。如果不清楚,“隐式”是这里的关键词-只有当source
,RelativeSource
,或者ElementName
属性都没有显式设置时,(继承的)DataContext
才被用作绑定的源代码。@Grx70我的意思是可以通过DataContext隐式设置源代码,这有意义吗?事实上,它可能没有被设置,但是绑定
将需要一些源代码,这并不完全意味着源代码
属性。非常感谢大家。马丁:你的解决方案帮助了我。
public ObservableCollection<FileProcessing_T> FileProcessing
{
get
{
return _fileProcessing;
}
set
{
if (_fileProcessing != value)
{
_fileProcessing = value;
RaisePropertyChanged("FileProcessing");
}
}
}
ObservableCollection<FileProcessing_T> _fileProcessing;
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}