Привязка данных в Listview с вложенным свойством - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь использовать просмотр списка для отображения некоторых данных, а также пытаюсь сгруппировать значения.На данный момент мои классы расположены таким образом, что мне нужно показать значение в списке из свойства, вложенного глубоко в другие свойства.Сейчас я не могу этого достичь.

Мой xaml-код:

 <Window.Resources>
        <CollectionViewSource x:Key="MyCollectionSource"                               
                              Source="{Binding Path=MySource}">
            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="IDTODisplay" />
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>
 <Window.DataContext>
        <local:MainWindowViewModel/>
    </Window.DataContext>


 <Grid>
        <ListView x:Name="StackOverflowList" HorizontalAlignment="Left" FontSize="14" 
                  Height="514" Margin="56,102,0,0" VerticalAlignment="Top" Width="243" 
                  ItemsSource="{Binding Source={StaticResource MyCollectionSource}, IsAsync=True}"
                  IsSynchronizedWithCurrentItem="True" 
                >
            <ListView.View>
                <GridView x:Name="gridview1"  >

                    <GridViewColumn x:Name="result"  Header="Result" DisplayMemberBinding="{Binding Path= XXXXXXX}"  Width="120"/>
                    <GridViewColumn x:Name ="value" Header="Value" DisplayMemberBinding="{Binding Path= XXXXXXX}"  Width="120" >
                      </GridViewColumn>
                    </GridView>
                </ListView.View>
        </ListView>
    </Grid>

В MainWindowViewModel:

class MainWindowViewModel
    {
        public ObservableCollection<Class1> MySource { get; set; }
    }


    public class Class1
    {
        public int orderId { get; set; }

        public int SerialNumber { get; set; }

        public List<Class2> Class2List { get; set; }
    }


    public class Class2
    {

        public int class2Id { get; set; }


        public List<Class3> Class3List { get; set; }
    }

    public class Class3
    {

        public int Class3ID { get; set; }


        public List<Class4> Class4List { get; set; }
    }

    public class Class4
    {

        public int Class4ID { get; set; }


        public int IDTODisplay { get; set; }

        public int ValueTODisplay { get; set; }
    }

Я хочу показать просмотр списка таким образом, чтобыЭлементы сгруппированы по IDTODisplay, и я могу показать ValueTODisplay рядом с ним примерно так:

Resutl Value
0  ---This is IDTODisplay and grouping of items is based on this.
  001    45     001 is Class4ID and 45 is ValueTODisplay of class 4 and so on
  002    46
  003    47
1
  001   500
  002   501

Edit2: Предполагая, что я не хочу переходить на сетку данных и хочу использоватьТолько просмотр списка и упрощение моего вложения классов, как показано ниже. Как я могу добиться группировки и показать значения в представлении списка

public class classA
    {
        public  int ClassId { get; set; }

        public int SerialNumber { get; set; }

        public List<classx> ClassXList { get; set; }
    }


    public class classx
    {
        public int ClassxId { get; set; }
        public bool Value{ get; set; }
    }


public ObservableCollection<classA> MySource { get; set; }



 MySource = new ObservableCollection<classA>();
            List<classx> _classXList = new List<classx>();
            classx c1 = new classx();
            c1.ClassxId = 0;
            c1.Value= true;

            classx c2 = new classx();
            c2.ClassxId = 2;
            c2.Value= false;

            classx c3 = new classx();
            c3.ClassxId = 3;
            c3.Value= true;

            classx c44 = new classx();
            c44.ClassxId = 4;
            c44.Value= false;

            _classXList.Add(c1);
            _classXList.Add(c2);
            _classXList.Add(c3);
            _classXList.Add(c44);


            classA p1 = new classA();
            p1.ClassId = 001;
            p1.SerialNumber = 001;
            p1.ClassXList = _classXList;

            classA p2 = new classA();
            p2.ClassId = 001;
            p2.SerialNumber = 001;
            p2.ClassXList = _classXList;

            classA p3 = new classA();
            p3.ClassId = 001;
            p3.SerialNumber = 001;
            p3.ClassXList = _classXList;

            Application.Current.Dispatcher.Invoke(() => MySource.Add(p1));
            Application.Current.Dispatcher.Invoke(() => MySource.Add(p2));
            Application.Current.Dispatcher.Invoke(() => MySource.Add(p3));

Ожидаемый результат в представлении списка

Group1
 0 true
 2 false
 3 true
 4 false
Group2
 0 true
 2 false
 3 true
 4 false
Group3
 0 true
 2 false
 3 true
 4 false
...