Уведомление об изменении свойства для свойства struct, DataGrid, Binding, INotifyPropertyChanged, Изменение значения строки списка

У меня есть struct именами struct которых есть свойство (int x и строка y), и конструктор берет intger и строку, чтобы присвоить их значение. Я также сделал observablecollection этих структурных данных. При создании коллекции я передал строковое свойство FirstCell и SecondCell в первом и втором списке, и этот FirstCell и SecondCell являются свойством, в котором реализовано изменение Inotifyproperty. Теперь, когда я изменяю этот FirstCell и SecondCell, они не меняются в datagrid.

Ниже приведен мой код для файла MainWindow.xaml.cs

 public partial class MainWindow : Window,INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged = (sender, e) => { }; private string _FirstCell="LUFFY"; private string _SecondCell= "SANJI"; public string FirstCell { get { return _FirstCell; } set { _FirstCell = value; PropertyChanged(this, new PropertyChangedEventArgs(nameof(FirstCell))); } } public string SecondCell { get { return _SecondCell; } set { _SecondCell = value; PropertyChanged(this, new PropertyChangedEventArgs(nameof(SecondCell))); } } private ObservableCollection<datapoints> _CheckNotifyUpdate; public ObservableCollection<datapoints> CheckNotifyUpdate { get { return _CheckNotifyUpdate; } set { _CheckNotifyUpdate = value; PropertyChanged(this, new PropertyChangedEventArgs(nameof(CheckNotifyUpdate))); } } public MainWindow() { InitializeComponent(); this.DataContext = this; CheckNotifyUpdate = new ObservableCollection<datapoints> { new datapoints(1, FirstCell), new datapoints(2, SecondCell) }; } } public struct datapoints { public int x { get; set; } public string y { get; set; } public datapoints(int X,string Y) { x = X; y = Y; } } 

Всего 1 ответ


Я изменил структуру на класс, и все работает, но поскольку ваши данные поступают от структуры, я думаю, что решение ниже для вас.

Struct - это тип значения, и привязка будет получать его копию, поэтому никогда не обновлять оригинальный объект.

    public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = (sender, e) => { };
    private string _FirstCell = "LUFFY";
    private string _SecondCell = "SANJI";
    public string FirstCell
    {
        get { return _FirstCell; }

        set
        {
            _FirstCell = value;
            PropertyChanged(this, new PropertyChangedEventArgs(nameof(FirstCell)));
            RefreshGrid();
        }

    }
    public string SecondCell
    {
        get { return _SecondCell; }

        set
        {
            _SecondCell = value;
            PropertyChanged(this, new PropertyChangedEventArgs(nameof(SecondCell)));
            RefreshGrid();
        }
    }

    private ObservableCollection<datapoints> _CheckNotifyUpdate;
    public ObservableCollection<datapoints> CheckNotifyUpdate
    {
        get { return _CheckNotifyUpdate; }

        set
        {
            _CheckNotifyUpdate = value;
            PropertyChanged(this, new PropertyChangedEventArgs(nameof(CheckNotifyUpdate)));

        }
    }

    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
        RefreshGrid();
    }

    private void RefreshGrid()
    {
        CheckNotifyUpdate = new ObservableCollection<datapoints>
        {
            new datapoints(1, FirstCell),
            new datapoints(2, SecondCell)
        };
    }
}

public struct datapoints
{
    public int x { get; set; }
    public string y { get; set; }

    public datapoints(int X, string Y)

    {
        x = X;
        y = Y;
    }
}

Измените его, чтобы создавать коллекцию каждый раз, когда происходит изменение значения ячейки.


Есть идеи?

10000