在c#WPF中将嵌套对象绑定到数据网格

在c#WPF中将嵌套对象绑定到数据网格,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我试图将DataGrid中显示的数据绑定到另一个对象(WhisperReader)中的动态对象列表(WhisperModel)。DataGrid只显示标题,但不显示值。当列表“耳语”发生更改时,如何使DataGrid动态更新自身 主窗口XAML: <DataGrid x:Name="whisperDataGrid" Margin="10,69,10,10" IsReadOnly="True" ItemsSource="{Binding}"/> 窃窃私语者: class Whispe

我试图将DataGrid中显示的数据绑定到另一个对象(WhisperReader)中的动态对象列表(WhisperModel)。DataGrid只显示标题,但不显示值。当列表“耳语”发生更改时,如何使DataGrid动态更新自身

主窗口XAML:

<DataGrid x:Name="whisperDataGrid" Margin="10,69,10,10" IsReadOnly="True" ItemsSource="{Binding}"/>
窃窃私语者:

class WhisperReader
{
    public ObservableCollection<WhisperModel> whispers { get; private set; }

    public WhisperReader()
    {
        whispers = new ObservableCollection<WhisperModel>();
    }

我认为您的问题在于它不知道何时进行自我更新,因为:

  • 您已将“耳语”列表设置为数据上下文
  • 要绑定到的属性不使用INotifyPropertyChanged
  • WhisperReader和WhisperModel不是公共的
  • 所有绑定都必须是公共的,必须是属性,并且必须调用PropertyChanged方法。 PropertyChanged函数触发绑定更新

    试试这个

    public partial class MainWindow : Window
    {
        private WhisperReader wr;
        public MainWindow()
        {
            InitializeComponent();
            wr = new WhisperReader();
            whisperDataGrid.DataContext = wr;
        }
    
    public class WhisperReader : INotifyPropertyChanged
    {
        ObservableCollection<WhisperModel> _whispers;
        public ObservableCollection<WhisperModel> whispers 
        { 
          get { return _whispers; } 
          private set 
          {
             _whispers = value;
             NotifyPropertyChanged(); 
          }
        }
    
        public WhisperReader()
        {
            whispers = new ObservableCollection<WhisperModel>();
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    
    
    public class WhisperModel : INotifyPropertyChanged
    {
        public DateTime sentTime { get; set; }
    
        private string _sender;
        public string sender 
        { 
            get { return _sender; } 
            set { _sender = value; NotifyPropertyChanged();
        }
    
        private string _message;
        public string message 
        { 
            get { return _message; } 
            set { _message = value; NotifyPropertyChanged();
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    
    <DataGrid x:Name="whisperDataGrid" Margin="10,69,10,10" IsReadOnly="True" AutoGenerateColumns="True" ItemsSource="{Binding whispers}"/>
    
    公共部分类主窗口:窗口
    {
    私人窃窃私语者;
    公共主窗口()
    {
    初始化组件();
    wr=新的读卡器();
    WhispertDataGrid.DataContext=wr;
    }
    公共类读取器:INotifyPropertyChanged
    {
    可观察到的收集——耳语;
    公众可观察的收集耳语
    { 
    获取{return}
    专用设备
    {
    _耳语=价值;
    NotifyPropertyChanged();
    }
    }
    公共读物()
    {
    耳语=新的可观察收集();
    }
    公共事件属性更改事件处理程序属性更改;
    私有void NotifyPropertyChanged([CallerMemberName]字符串propertyName=”“)
    {
    if(PropertyChanged!=null)
    {
    PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
    }
    }
    公共类模型:INotifyPropertyChanged
    {
    公共日期时间sentTime{get;set;}
    私有字符串\u发送方;
    公共字符串发送器
    { 
    获取{return\u sender;}
    设置{u sender=value;NotifyPropertyChanged();
    }
    私有字符串消息;
    公共字符串消息
    { 
    获取{return\u message;}
    设置{u message=value;NotifyPropertyChanged();
    }
    公共事件属性更改事件处理程序属性更改;
    私有void NotifyPropertyChanged([CallerMemberName]字符串propertyName=”“)
    {
    if(PropertyChanged!=null)
    {
    PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
    }
    }
    }
    
    class WhisperModel
    {
        public DateTime sentTime { get; set; }
        public string sender { get; set; }
        public string message { get; set; }
    }
    
    public partial class MainWindow : Window
    {
        private WhisperReader wr;
        public MainWindow()
        {
            InitializeComponent();
            wr = new WhisperReader();
            whisperDataGrid.DataContext = wr;
        }
    
    public class WhisperReader : INotifyPropertyChanged
    {
        ObservableCollection<WhisperModel> _whispers;
        public ObservableCollection<WhisperModel> whispers 
        { 
          get { return _whispers; } 
          private set 
          {
             _whispers = value;
             NotifyPropertyChanged(); 
          }
        }
    
        public WhisperReader()
        {
            whispers = new ObservableCollection<WhisperModel>();
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    
    
    public class WhisperModel : INotifyPropertyChanged
    {
        public DateTime sentTime { get; set; }
    
        private string _sender;
        public string sender 
        { 
            get { return _sender; } 
            set { _sender = value; NotifyPropertyChanged();
        }
    
        private string _message;
        public string message 
        { 
            get { return _message; } 
            set { _message = value; NotifyPropertyChanged();
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    
    <DataGrid x:Name="whisperDataGrid" Margin="10,69,10,10" IsReadOnly="True" AutoGenerateColumns="True" ItemsSource="{Binding whispers}"/>