将ObservableCollection绑定到DataGrid

本文关键字:DataGrid 绑定 ObservableCollection | 更新日期: 2023-09-27 18:30:07

好吧,我是WPF的新手。我正在尝试将集合绑定到DataGrid控件。当我运行程序时,即使集合中有数据,DataGrid中的单元格也是空白的。

我已经多次阅读MSDN上的所有相关文章。我搜索了Stack Overflow,但运气不佳。我花了一天半的时间在这上面,和刚开始的时候一样困惑。这是我迄今为止所拥有的。

DataGrid控件的XAML:

<DataGrid AutoGenerateColumns="False" Margin="0,85,0,0" Name="dtaCompilation" ItemsSource="{Binding}">
   <DataGrid.Columns>
      <DataGridTextColumn Binding="{Binding FileName}"></DataGridTextColumn>
   </DataGrid.Columns>
</DataGrid>

这是包含我收藏的类:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        dtaCompilation.DataContext = Compilation;
    }
    ObservableCollection<CompilationFile> Compilation = new ObservableCollection<CompilationFile>();
    public class CompilationFile : INotifyPropertyChanged
    {
        public CompilationFile(string setPath, string setFile, string setExt)
        {
            this.Path = setPath;
            this.FileName = setFile;
            this.Extension = setExt;
        }
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
        private string fileName;
        string FileName {
            get { return fileName; }
            set
            {
                fileName = value;
                OnPropertyChanged("FileName");
            }
        }
        string Path { get;  set; }
        string Extension { get;  set; }
    }
}

最终的结果是DataGrid只显示Compilation集合中每个CompilationFile对象的FileName属性。如果编辑DataGrid中的单元格,则相关对象的FileName属性将在集合中更新。我到底需要做些什么才能使用上面的代码?

将ObservableCollection绑定到DataGrid

设置要数据绑定到公共的属性

public string FileName {
        get { return fileName; }
        set
        {
            fileName = value;
            OnPropertyChanged("FileName");
        }
    }
 public string Path { get;  set; }
 public string Extension { get;  set; }