簡體   English   中英

在C#WPF中將嵌套對象綁定到DataGrid

[英]Binding a nested object to a DataGrid in c# WPF

我正在嘗試將DataGrid中顯示的數據綁定到另一個對象(WhisperReader)內部的對象(WhisperModel)的動態列表。 DataGrid僅顯示標題,但不顯示任何值。 當列表“耳語”更改時,如何使DataGrid動態更新自身?

主窗口XAML:

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

主窗口C#

public partial class MainWindow : Window
{
    private WhisperReader wr;
    public MainWindow()
    {
        InitializeComponent();
        wr = new WhisperReader();
        whisperDataGrid.DataContext = wr.whispers;
    }

WhisperReader:

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

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

WhisperModel:

class WhisperModel
{
    public DateTime sentTime { get; set; }
    public string sender { get; set; }
    public string message { get; set; }
}

我認為您的問題是它不知道何時更新自身,因為:

  1. 您已將耳語列出了數據上下文。
  2. 您要綁定的屬性不使用INotifyPropertyChanged。
  3. 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}"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM