У меня есть 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;
}
}
Измените его, чтобы создавать коллекцию каждый раз, когда происходит изменение значения ячейки.