2013-05-07 2 views
0

Я следил за Trouble saving a collection of objects in Application Settings, чтобы сохранить мой ObservableCollection пользовательских объектов, привязанных к DataGrid в настройках приложения, но данные не сохраняются в user.config, как и другие настройки. Может кто-нибудь мне помочь? Спасибо!Сохранение коллекции пользовательских объектов в настройках приложения

Мои пользовательские классы:

[Serializable()] 
public class ActuatorParameter 
{ 
    public ActuatorParameter() 
    {} 
    public string caption { get; set; } 
    public int value { get; set; } 
    public IntRange range { get; set; } 
    public int defaultValue { get; set; } 
} 

и

[Serializable()] 
public class IntRange 
{ 
    public int Max { get; set; } 
    public int Min { get; set; } 

    public IntRange(int min, int max) 
    { 
     Max = max; 
     Min = min; 
    } 
    public bool isInRange(int value) 
    { 
     if (value < Min || value > Max) 
      return true; 
     else 
      return false; 
    } 
} 

сбора мусора и сохранить:

Settings.Default.pi_parameters = new ObservableCollection<ActuatorParameter> 
{ 
new ActuatorParameter() { caption = "Velocity", range = new IntRange(1, 100000), defaultValue = 90000}, 
new ActuatorParameter() { caption = "Acceleration", range = new IntRange(1000, 1200000), defaultValue = 600000}, 
new ActuatorParameter() { caption = "P-Term", range = new IntRange(150, 350), defaultValue = 320}, 
new ActuatorParameter() { caption = "I-Term", range = new IntRange(0, 60), defaultValue = 30}, 
new ActuatorParameter() { caption = "D-Term", range = new IntRange(0, 1200), defaultValue = 500}, 
new ActuatorParameter() { caption = "I-Limit", range = new IntRange(0, 1000000), defaultValue = 2000} 
}; 
Settings.Default.Save(); 

Мой заказ установка:

internal sealed partial class Settings 
{ 
    [global::System.Configuration.UserScopedSettingAttribute()] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    public ObservableCollection<ActuatorParameter> pi_parameters 
    { 
     get 
     { 
      return ((ObservableCollection<ActuatorParameter>)(this["pi_parameters"])); 
     } 
     set 
     { 
      this["pi_parameters"] = value; 
     } 
    } 
} 

ответ

2

После долгих исследований я наконец выяснил, что в классе IntRange отсутствует стандартный конструктор.

[Сериализуемый()]

public class IntRange 
{ 
    public int Max { get; set; } 
    public int Min { get; set; } 

    public IntRange() 
    {} 

    public IntRange(int min, int max) 
    { 
     Max = max; 
     Min = min; 
    } 
    public bool isInRange(int value) 
    { 
     if (value < Min || value > Max) 
      return true; 
     else 
      return false; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^