1

別の中にObservableCollectionObservableCollectionを追加する必要がありますが、それは可能ですか?

Items = new ObservableCollection<WidgetCollectionItem>();

            foreach (XElement wid in document.Root.Elements("widget"))
            {
                WidgetCollectionItem item = new WidgetCollectionItem();

                item.nombreWidget = wid.Attribute("caption").Value;

                foreach (XElement service in wid.Elements("service"))
                {
                    item.nombreServicio = service.Attribute("caption").Value;
                    item.valor = service.Element("xvalue").Value;
                    item.color = service.Element("xcolor").Value;
                    item.alerta = service.Element("xalert") != null ? service.Element("xalert").Value : null;
                    Items.Add(item);
                }
            }

問題は、各(item.nombreWidget)に複数の(item.nombreServicio)が含まれていることです。そして、nombreWidgetのObservableCollection内にサービスのObservableCollectionが必要です

4

3 に答える 3

0

ちょっといい考えですが、それでも私が欲しいものを示すことができません。私はxmlデータを取得します、そしてこれらはそれらをグリッドに表示したいです

最終結果は次のようになります。

nombreWidget1 nombreServicio1

nombreWidget2 nombreServicio2 nombreServicio2 nombreServicio2

nombreWidgetにサービスが1つしかない場合は問題ありませんが、nombreWidget nombreServicioが複数ある場合は、画面にうまく表示できません。

ObservableCollectionが必要です

public class WidgetCollectionItem
{
    public string nombreWidget { get; set; }
}

ObservableCollectionが含まれています

public class WidgetServiciosCollectionItem 
{
        public string nombreServicio { get; set; }
        public string valor { get; set; }
        public string color { get; set; }
        public string alerta { get; set; }
}
于 2013-01-10T09:33:14.767 に答える
0

はい、できます。

new ObservableCollection<ObservableCollection<WidgetCollectionItem>>()

したがって、次のようなことができます。

Items = new ObservableCollection<ObservableCollection<WidgetCollectionItem>>();

foreach (XElement wid in document.Root.Elements("widget"))
{
    ObservableCollection<WidgetCollectionItem> services = new ObservableCollection<WidgetCollectionItem>();

    foreach (XElement service in wid.Elements("service"))
    {
        WidgetCollectionItem widget = new WidgetCollectionItem();
        widget.nombreWidget = wid.Attribute("caption").Value;
        widget.nombreServicio = service.Attribute("caption").Value;
        widget.valor = service.Element("xvalue").Value;
        widget.color = service.Element("xcolor").Value;
        widget.alerta = service.Element("xalert") != null ? service.Element("xalert").Value : null;
        services.Add(widget);
    }
    Items.Add(services)
}
于 2013-01-09T16:10:23.397 に答える
0

達成したいことを達成したように見えますが、グリッド内のすべてのデータはまだ表示されていません:

以前の解決策:

Items = new ObservableCollection<WidgetCollectionItem>();

            foreach (XElement wid in document.Root.Elements("widget"))
            {
                WidgetCollectionItem widget = new WidgetCollectionItem();
                widget.nombreWidget = wid.Attribute("caption").Value;

                foreach (XElement service in wid.Elements("service"))
                {
                    ServiciosWidgetCollectionItem ser = new ServiciosWidgetCollectionItem();
                    widget.ItemsSer = new ObservableCollection<ServiciosWidgetCollectionItem>();

                    ser.nombreServicio = service.Attribute("caption").Value;
                    ser.valor = service.Element("xvalue").Value;
                    ser.color = service.Element("xcolor").Value;
                    ser.alerta = service.Element("xalert") != null ? service.Element("xalert").Value : null;

                    widget.ItemsSer.Add(ser);
                }
                Items.Add(widget);
            }


public class WidgetCollectionItem
{
    public string nombreWidget { get; set; }
    public ObservableCollection<ServiciosWidgetCollectionItem> ItemsSer { get; set; }
}


public class ServiciosWidgetCollectionItem
{
    public string nombreServicio { get; set; }
    public string valor { get; set; }
    public string color { get; set; }
    public string alerta { get; set; }
}

データ グリッドの ObservableCollection にも移動するにはどうすればよいですか?

于 2013-01-10T12:07:44.933 に答える