1

В примерах новые элементы добавляются в Observercollection вручную, проблема в том, что я хочу добавить данные из моего rootobject, где все они существуют и читаются из Json.

Main Page

    ObservableCollection<Class1> rootobject { get; set; }
Class1 cs1 = new Class1();
public Detail detail { get; set; }
public MainPage()
{
    this.InitializeComponent();
    string FilePath = Path.Combine(Package.Current.InstalledLocation.Path, &quot;Class1.json&quot;);
    using (StreamReader file = File.OpenText(FilePath))
    {
        var json = file.ReadToEnd();
        rootobject = JsonConvert.DeserializeObject&lt;ObservableCollection&lt;Class1&gt;&gt;(json);
        //Color c = new Color();
        var items = new List&lt;Class1&gt;();

        items.Add(new Detail
        {
            icon_url = ?,
        });

        items.Add(new Gradient_Props
        {
            gradient_stop_1 = ?,
            gradient_stop_2 = ?,
        });


    }


}

Class created special JSON as Class

 public class Rootobject
    {
        public Class1[] Property1 { get; set; }
    }
    public class Class1
    {
        public string itemType { get; set; }
        public string type { get; set; }
        public string title { get; set; }
        public Detail[] details { get; set; }
}
public class Detail : Class1
{
    public string detail_type { get; set; }
    public string itemType { get; set; }
    public string fill_color { get; set; }
    public Gradient_Props gradient_props { get; set; }
    public string icon_url { get; set; }
    public string resource_url { get; set; }
}
public class Gradient_Props : Class1
{
    public string gradient_stop_1 { get; set; }
    public string gradient_stop_2 { get; set; }
}
public class Color : Class1
{
    public Color(string color)
    {
        color = this.title;
    }
}
public class Icon : Class1
{
    public Icon(Detail[] iconUrl)
    {
        iconUrl = this.details;
    }
}

aepot
  • 49,560
  • Ну так в чем проблема? Привязывайтесь к этому свойству и выводите. Я же вам сказал "Почитайте про UWP, прочитайте про привязки, вам же легче будет!" – EvgeniyZ Sep 03 '20 at 12:21
  • про привязки я прочитал,но конечно еще нужно примери посмотреть и такое что было бы более понятным но мне нужно что бы я получил нужные свойства из json дал им определеный тип который я создал и все использовать через DataTemplateSelector @EvgeniyZ – Խաչատուր Մելքոնյան Sep 03 '20 at 12:31
  • Для начала, я вам очень сильно советую сделать грамотную структуру вашего проекта, обдумать как и что должно быть, например, зачем вам DataTemplateSelector? Зачем вы делаете Detail : Class1 (наследование)? Зачем using (StreamReader file = File.OpenText(FilePath))? Ну и зачем var items = new List<Class1>();? Про привязки вы явно не читали, ибо "привязаться можно только к публичным свойствам", где у вас публичное свойство? – EvgeniyZ Sep 03 '20 at 12:39
  • сделать грамотную структуру вашего проекта.Что вы имеете в виду? Пишите более четко
  • 2.DataTemplateSelector для перемещения для контроля управления 3.Detail : Class1 если не наследование то были проблеми и кое какие свойства получили null 4.using (StreamReader file = File.OpenText(FilePath)) для чтения файла json 5.var items = new List(); Здесь для использования observercollection

    Понятно что не все идеально написанно но питаюсь понять и что-то изменить @EvgeniyZ

    – Խաչատուր Մելքոնյան Sep 03 '20 at 12:50
  • Я максимально четко и написал, у вас "кривая" структура проекта, вы топчитесь на месте, не понимая как должно и что надо делать. 2. Какого перемещения, о чем речь? 3. Это костыль из за неверной структуры данных. 4 .DeserializeObject<...>(File.ReadAllText("Class1.json")); 5. Как это относится к ObserverCollection?
  • – EvgeniyZ Sep 03 '20 at 12:56
  • ОК тогда как всю изменить или именно какой пример смотреть что было би чуть проще @EvgeniyZ? – Խաչատուր Մելքոնյան Sep 03 '20 at 12:58
  • 1
    Вот я вам набросал десериализацию вашего JSON и получение нужных данных из него. Сравните с тем, что у вас сейчас. Классы сгенерировал при помощи этого ресурса, он там выдал немного лишнего, но может быть полезного для вас (конверторы), на их основе вы можете сделать вовсе разделение данных на классы (что будет правильней) и вам не придется таскать NULL объекты, которые не предназначены например для градиента. – EvgeniyZ Sep 03 '20 at 13:36
  • 1
    Имея такую простую структуру вы можете уже делать что вам надо, к примеру нам нужны все градиенты и только их цвета. Делаем такое: var allGradient = json.SelectMany(x => x.Details).Where(x=>x.DetailType == TypeEnum.Gradient).Select(x=> new { First = x.GradientProps.GradientStop1, Second = x.GradientProps.GradientStop2 });, что даст удобный список градиентов со значениями First и Second, в которых будут цвета. Так что, как видите, читаемая и понятная структура данных, это удобно. Вам остается лишь это привязать куда надо, а для этого читайте про привязки!! – EvgeniyZ Sep 03 '20 at 13:39