Как связать данные объекта вложенного списка в формах Listview Xamarin - PullRequest
0 голосов
/ 13 мая 2019

У меня есть вложенный объект List, и я хочу связать их со списком, все мои данные верны, также я реализовал событие INotifyChanged, но данные в пользовательском интерфейсе не отображаются

вот мой Xaml UI

  <ListView x:Name ="lstView" Margin="0,5,0,5" VerticalScrollBarVisibility="Always" HasUnevenRows="True" VerticalOptions="FillAndExpand" ItemsSource="{Binding Grouped}" IsGroupingEnabled="true" SelectionMode="None" SeparatorVisibility="None"   GroupDisplayBinding="{Binding LongName}" GroupShortNameBinding="{Binding ShortName}">
            <ListView.GroupHeaderTemplate>
                <DataTemplate>          
                      <Grid Margin="5,20,0,0" RowSpacing="0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="5*"/>
            <ColumnDefinition Width="95*"/>
        </Grid.ColumnDefinitions> 

        <Image Grid.Column="0" Source="radiochecked.png" VerticalOptions="End" />
        <Frame Grid.Column="1" HasShadow="False" HorizontalOptions="Start" Padding="6,2,6,2" BackgroundColor="#608EF6">
        <Label Text="{Binding LongName}" TextColor="White" VerticalTextAlignment="Center" ></Label>
        </Frame>
    </Grid> 
                </DataTemplate>
            </ListView.GroupHeaderTemplate>
            <ListView.ItemTemplate>
                <DataTemplate>

                     <Grid Margin="5,0,10,0" HorizontalOptions="FillAndExpand" RowSpacing="0" VerticalOptions="FillAndExpand" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="5*"/>
                <ColumnDefinition Width="95*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="10"/>
                <RowDefinition Height="70"/>
            </Grid.RowDefinitions>
            <BoxView           
                                Grid.Column="0" Grid.Row="0" 
                                BackgroundColor="#566781"
                                HorizontalOptions="Center"           
                                VerticalOptions="Fill"
                                WidthRequest="2" />


            <Image Grid.Column="0" Grid.Row="1"  Source="radiochecked.png" />



            <BoxView           
                                Grid.Column="0" Grid.Row="2"
                                BackgroundColor="#566781"
                                HorizontalOptions="Center"           
                                VerticalOptions="Fill"
                                WidthRequest="2" />


            <Frame Grid.Column="1" Grid.Row="0" HasShadow="False" Grid.RowSpan="3" Padding="0,0,2,0" Margin="0,10,0,5" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                <StackLayout HorizontalOptions="FillAndExpand" Orientation="Horizontal" VerticalOptions="FillAndExpand">
                <BoxView BackgroundColor="{Binding EncounterFrameColor}" WidthRequest="3"></BoxView>

                    <Grid Margin="0,8,0,0" HorizontalOptions="FillAndExpand" VerticalOptions="Start">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="10"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="30"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <StackLayout Spacing="0" Grid.Column="0">
                        <Label Text="{Binding EncounterMonth}" Margin="3,1,0,0" FontSize="10" TextColor="Black" VerticalOptions="Start"  HorizontalOptions="Start"></Label>
                            <Label Text="{Binding MDate}" Margin="3,2,0,0" FontSize="15" TextColor="Black" FontAttributes="Bold" HorizontalTextAlignment="Center" VerticalOptions="Start" HorizontalOptions="Start"></Label>
                        </StackLayout>
                        <StackLayout Grid.Column="2" VerticalOptions="Start"  Grid.Row="0" HorizontalOptions="FillAndExpand">
                            <Grid RowSpacing="0">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="15"/>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="15"/>
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>
                            <Image Source="{Binding EncounterImage}" Margin="0,2,0,0" VerticalOptions="Start" Grid.Row="0" Grid.Column="0"/>
                            <Label Text="{Binding Encounter}" TextColor="Black" FontSize="12" Grid.Row="0" VerticalOptions="Start" Grid.Column="1" ></Label>


                            <StackLayout  Margin="0,0,0,5" Spacing="0" BindableLayout.ItemsSource="{Binding UserVitals}" Grid.Row="1" Grid.Column="1" >
                                    <BindableLayout.ItemTemplate>
                                        <DataTemplate>
                                            <Grid RowSpacing="0">
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="*"/>
                                                    <ColumnDefinition Width="10"/>
                                                    <ColumnDefinition Width="*"/>
                                                </Grid.ColumnDefinitions>
                                                <Label Text="{Binding Description}" Grid.Column="0" FontSize="10" TextColor="Black" />
                                                <Label Text="{Binding Values}" HorizontalOptions="Start" Grid.Column="2" FontSize="10"  TextColor="Black"/>
                                            </Grid>

                                        </DataTemplate>
                                    </BindableLayout.ItemTemplate>
                                </StackLayout>
                            </Grid>
                        </StackLayout>
                    </Grid>
                </StackLayout>
            </Frame>
        </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

Я пытаюсь создать вид списка группировки, который группируется с Годом

вот моя модель

 public class EncounterFrameModel
{
    public string EncounterMonth { get; set; }
    public string MDate { get; set; }
    public string Comment { get; set; }
  //  public bool IsReallyAVeggie { get; set; }
    public string EncounterFrameColor { get; set; }
    public string Image { get; set; }
    public string Encounter { get; set; }
   // public List<TotalItem> Totals { get;set; }
    public string EncounterImage { get; set; }
    public ObservableCollection<UserHealthDetails> UserVitals { get; set; }

    public EncounterFrameModel()
    {
    }
}


public class UserHealthDetails
{

    public string Description { get; set; }
    public string Values { get; set; }
}




public class EncounteredYear
{
    public EncounteredYear()
    {
        encounterFrameModels = new ObservableCollection<EncounterFrameModel>();
    }
    public string LongName { get; set; }
    public string ShortName { get; set; }
    public ObservableCollection<EncounterFrameModel> encounterFrameModels { get; set; }
}

Может ли кто-нибудь помочь мне связать эти данные

1 Ответ

1 голос
/ 14 мая 2019

Вы можете попробовать это:

смените EncounteredYear модель следующим образом:

class EncounteredYear:ObservableCollection<EncounterFrameModel>
{
    public string LongName { get; set; }
    public string ShortName { get; set; }     
}

в вашем page.xaml.cs установите ваши данные (генерируйте данные в соответствии с вашей ситуацией):

ObservableCollection<EncounteredYear> grouped = new ObservableCollection<EncounteredYear>();
var gounp1 = new EncounteredYear() {...};
var gounp2 = new EncounteredYear() {...};
var gounp3 = new EncounteredYear() {...};
gounp1.Add(new EncounterFrameModel() {...});
gounp1.Add(new EncounterFrameModel() {...});
gounp1.Add(new EncounterFrameModel() {...});
gounp1.Add(new EncounterFrameModel() {...});
gounp2.Add(new EncounterFrameModel() {...});
gounp2.Add(new EncounterFrameModel() {...});
gounp2.Add(new EncounterFrameModel() {...});
gounp2.Add(new EncounterFrameModel() {...});
gounp3.Add(new EncounterFrameModel() {...});
gounp3.Add(new EncounterFrameModel() {...});
gounp3.Add(new EncounterFrameModel() {...});
gounp3.Add(new EncounterFrameModel() {...});
grouped.Add(gounp1);
grouped.Add(gounp2);
grouped.Add(gounp3);
lstView.ItemsSource = grouped;// bind the list of the grouplist

тогда xaml вашей страницы как и прежде, но удалите ItemsSource="{Binding Grouped}" и должны добавить <ViewCell> внутри <DataTemplate>:

<ListView x:Name ="lstView" Margin="0,5,0,5" VerticalScrollBarVisibility="Always" HasUnevenRows="True" VerticalOptions="FillAndExpand" IsGroupingEnabled="true" SelectionMode="None" SeparatorVisibility="None"   GroupDisplayBinding="{Binding LongName}" GroupShortNameBinding="{Binding ShortName}">
   <ListView.GroupHeaderTemplate>
      <DataTemplate>
        <ViewCell>          
         ...
        </ViewCell>
       </DataTemplate>
   </ListView.GroupHeaderTemplate>
   <ListView.ItemTemplate>
      <DataTemplate>
        <ViewCell>
          ...
        </ViewCell>
      </DataTemplate>
   </ListView.ItemTemplate>
</ListView>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...