У меня есть программа, которая получает данные из json, помещает их в список, и я могу нажать кнопку refre sh, чтобы получить новые данные. Когда я нажимаю кнопку в первый раз, я получаю данные, но если я нажимаю ее снова, я получаю следующее: «Лучшее совпадение перегруженного метода для MyApp.ViewModels.TableViewModel.UpdateWithModel (MyApp.Model.TableModel)» имеет недопустимые аргументы »
TableModel.cs (модель)
public class TableModel
{
public string Name { get; set; }
public Data data { get; set; }
public string Unit { get; set; }
}
public class Data
{
public double x { get; set; }
public double y { get; set; }
public double z { get; set; }
}
TableViewModel.cs (ViewModel)
using Model;
public class TableViewModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged("Name");
}
}
}
private double _x;
public string X
{
get
{
return _x.ToString("0.0####", CultureInfo.InvariantCulture);
}
set
{
if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _x!= tmp)
{
_x= tmp;
OnPropertyChanged("x");
}
}
}
private double _y;
public string Y
{
get
{
return _y.ToString("0.0####", CultureInfo.InvariantCulture);
}
set
{
if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _y!= tmp)
{
_y= tmp;
OnPropertyChanged("Y");
}
}
}
private double _z;
public string Z
{
get
{
return _z.ToString("0.0####", CultureInfo.InvariantCulture);
}
set
{
if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _z!= tmp)
{
_z= tmp;
OnPropertyChanged("Z");
}
}
}
private string _unit;
public string Unit
{
get
{
return _unit;
}
set
{
if (_unit != value)
{
_unit = value;
OnPropertyChanged("Unit");
}
}
}
public TableViewModel(TableModel model)
{
UpdateWithModel(model);
}
public void UpdateWithModel(TableModel model)
{
_name = model.Name;
OnPropertyChanged("Name");
_unit = model.Unit;
OnPropertyChanged("Unit");
_x= model.data.x;
OnPropertyChanged("x");
_y= model.data.y;
OnPropertyChanged("y");
_z= model.data.z;
OnPropertyChanged("z");
}
#region PropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
/**
* @brief Simple function to trigger event handler
* @params propertyName Name of ViewModel property as string
*/
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
MainViewModel.cs (ViewModel)
public ObservableCollection<TableViewModel> NewMeasurements { get; set; }
public ButtonCommand RefreshFnc { get; set; }
private tableServer iotTable = new tableServer();
void RefreshData()
{
// Read data from server in JSON array format
dynamic measurementsJsonArray = iotTable.getMeasurements();
// Convert generic JSON array container to list of specific type
dynamic measurementsListA = measurementsJsonArray.ToObject<List<TableModel>>();
// Add new elements to collection
if (NewMeasurements.Count < measurementsListA.Count)
{
foreach (var m in measurementsListA)
NewMeasurements.Add(new TableViewModelOri(m));
}
// Update existing elements in collection
else
{
for (int i = 0; i < NewMeasurements.Count; i++)
{
NewMeasurements[i].UpdateWithModel(measurementsListA);
}
}
}
РЕДАКТИРОВАТЬ
в этой строке NewMeasurements[i].UpdateWithModel(measurementsListA);
Я только что заменил sizesListA на sizeslistA [i], и это сработало.
Спасибо за ответы, обязательно присмотрю тип Dynami c.