2017-07-31 11 views
0

とXAMLを形成して、私はXAMLを使用していますネストされたリストビューは、私は以下のxamarinのように、ネストされたリストビューを望むMVVM

enter image description here

形成し、

以下のようにMVVM

私のモデルを使用してバインドしたいです

public class LineItemTaxDto 
    { 
     public int InvoiceLineItemId { get; set; } 
     public int InvoiceId { get; set; } 
     public int TaxId { get; set; } 
     public decimal TaxRate { get; set; } 
     public decimal TaxAmount { get; set; } 
     public string TaxName { get; set; } 
     public ObservableCollection<LineItemTaxDto> SubTaxes { get; set; } 

    } 

このグループの税金は私の主な税金であり、それには副税(VAT、GST)が含まれています。

EDIT

私のXAMLコードは

<ListView x:Name="TaxListView" ItemsSource="{Binding Invoice.Taxgroup}" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" SeparatorVisibility="None" HasUnevenRows="false" RowHeight="35"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <ViewCell> 
          <Grid RowSpacing="0" ColumnSpacing="0"> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="Auto" /> 
            <RowDefinition Height="Auto" /> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*" /> 
            <ColumnDefinition Width="150" /> 
           </Grid.ColumnDefinitions> 
           <StackLayout Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Spacing="0" HorizontalOptions="End"> 
            <Label Text="{Binding Source={x:Reference TaxListView}, Path=BindingContext.CurrentOutlet.ReceiptTemplate.TaxLable, StringFormat='{0} ('}" FontSize="22" FontFamily="{x:Static resources:Fonts.ArialMTFont}" HorizontalOptions="End" Margin="0,5,0,5" /> 
            <Label Text="{Binding TaxName, StringFormat='{0})'}" FontSize="22" FontFamily="{x:Static resources:Fonts.ArialMTFont}" HorizontalOptions="End" HorizontalTextAlignment="End" Margin="0,5,0,5" /> 
           </StackLayout> 
           <Label Grid.Row="0" Grid.Column="1" Text="{Binding TaxAmount, Converter={Helpers:CurrencyAmountConverter}}" FontSize="22" FontFamily="{x:Static resources:Fonts.ArialMTFont}" HorizontalOptions="End" Margin="0,5,0,5" /> 


           <ListView x:Name="TaxListView2" ItemsSource="{Binding Invoice.Taxgroup}" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" SeparatorVisibility="None" HasUnevenRows="false" RowHeight="35"> 
            <ListView.ItemTemplate> 
             <DataTemplate> 
              <ViewCell> 
               <Grid RowSpacing="0" ColumnSpacing="0"> 
                <Grid.RowDefinitions> 
                 <RowDefinition Height="Auto" /> 
                </Grid.RowDefinitions> 
                <Grid.ColumnDefinitions> 
                 <ColumnDefinition Width="*" /> 
                 <ColumnDefinition Width="150" /> 
                </Grid.ColumnDefinitions> 
                <StackLayout Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Spacing="0" HorizontalOptions="End"> 
                 <Label Text="{Binding TaxName}" FontSize="22" FontFamily="{x:Static resources:Fonts.ArialMTFont}" HorizontalOptions="End" HorizontalTextAlignment="End" Margin="0,5,0,5" /> 
                </StackLayout> 
                <Label Grid.Row="0" Grid.Column="1" Text="{Binding TaxAmount, Converter={Helpers:CurrencyAmountConverter}}" FontSize="22" FontFamily="{x:Static resources:Fonts.ArialMTFont}" HorizontalOptions="End" Margin="0,5,0,5" /> 
               </Grid> 
              </ViewCell> 
             </DataTemplate> 
            </ListView.ItemTemplate> 
           </ListView> 
          </Grid> 
         </ViewCell> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 

を下回っている。しかし働いていません。私が間違っていることに私を助けてください。事前のおかげで

+2

ネストされたリストビューは良い選択ではありません。グループ化する必要がある場合はグループ化してください(このサンプルはhttps://developer.xamarin.com/samples/xamarin-forms/UserInterface%5CListView%5CGrouping/をご覧ください)。 –

+0

@DiegoRafaelSouzaは、私のモデルを見て、私に知らせてくださいが、この中にその可能なグループですか? –

+0

あなたのモデルは私には不完全なようです。グループ化は両手戦略で、viewmodelの他のページに...あなたの質問を編集してシナリオを単純化できますか?多分私はそれを助けることができます。 –

答えて

0

は、私は、単一のリストにネストされたリストビューへの必要性を全く使用しなかった結果、上記解決

を解決しました。 私のコードは以下の通りです。

のような私のXAMLコードを見て:のような

<ListView 
       x:Name="TaxListView" 
       ItemsSource="{Binding Invoice.ReceiptTaxList}" 
       Grid.Row="2" 
       Grid.Column="0" 
       Grid.ColumnSpan="2" 
       VerticalOptions="FillAndExpand" 
       HorizontalOptions="FillAndExpand" 
       SeparatorVisibility="None" 
       HasUnevenRows="false" 
       RowHeight="35" 
       > 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <ViewCell> 
          <Grid RowSpacing="0" ColumnSpacing="0"> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="Auto" /> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*" /> 
            <ColumnDefinition Width="150" /> 
           </Grid.ColumnDefinitions> 
           <Label Grid.Row="0" Grid.Column="0" Text="{Binding TaxName}" FontSize="22" FontFamily="{x:Static resources:Fonts.ArialMTFont}" HorizontalOptions="End" HorizontalTextAlignment="End" Margin="0,5,0,5" /> 
           <Label Grid.Row="0" Grid.Column="1" Text="{Binding TaxAmount, Converter={Helpers:CurrencyAmountConverter}}" FontSize="22" FontFamily="{x:Static resources:Fonts.ArialMTFont}" HorizontalOptions="End" Margin="0,5,0,5" /> 
          </Grid> 
         </ViewCell> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 

マイビューモデルのコードを見て:

var TMPTaxList = invoice.InvoiceLineItems.Where(x => x.TaxId > 1).Select(x => 
       { 
        return new KeyValuePair<LineItemTaxDto, ObservableCollection<LineItemTaxDto>>(new LineItemTaxDto() 
        { 
         InvoiceLineItemId = x.Id, 
         InvoiceId = x.InvoiceId, 
         TaxId = x.TaxId, 
         TaxRate = x.TaxRate, 
         TaxAmount = x.TaxAmount, 
         TaxName = "Tax (" + x.TaxName + ")" 
        }, x.LineItemTaxes); 
       }); 

     var taxes = new ObservableCollection<LineItemTaxDto>(); 
     foreach (var tax in TMPTaxList.GroupBy(tax => tax.Key.TaxId) 
    .Select(grp => grp.First())) 
     { 
      taxes.Add(tax.Key); 
      foreach (var subtax in tax.Value.Where(x => x.TaxId > 0)) 
      { 
       taxes.Add(subtax); 
      } 
     } 

     invoice.ReceiptTaxList = taxes; 
関連する問題