簡體   English   中英

如何在WPF中將datagrid與兩個itemSource綁定?

[英]How to bind datagrid with two itemsSource in WPF?

我的XAML中有類似的內容

<DataGrid  Name="dgDisplay" >
    <DataGrid.Columns>
          <DataGridTextColumn IsReadOnly="True" x:Name="dgItemCode" Width="100" Header="Barcode" Binding="{Binding ItemCode}" />
           <DataGridTextColumn IsReadOnly="True" x:Name="dgItemName" Width="200" Header="Item Name" Binding="{Binding ItemName}" />
           <DataGridTextColumn IsReadOnly="True" x:Name="dgItemPrice" Width="100" Header="Item Price" Binding="{Binding ItemPrice, StringFormat=RM {0}}" />
           <DataGridTextColumn IsReadOnly="True" x:Name="dgQuantity" Width="150" Header="Quantity" Binding="{Binding Quantity, UpdateSourceTrigger=PropertyChanged}"   />
        </DataGrid.Columns>

      <DataGrid.RowDetailsTemplate >
         <DataTemplate  x:Name="dtItemDisplay"  >
           <StackPanel  Name="spItemDisplay2" HorizontalAlignment="Stretch" Background="White" >
              <Grid>
                <TextBlock Text="Discount: " FontWeight="Bold" Grid.Column="2" Grid.Row="1"/>
                 <TextBox KeyDown="TxtDisc_KeyDown"  x:Name="txtDisc" Text="{Binding Discount, UpdateSourceTrigger=PropertyChanged}" Grid.Column="3" Grid.Row="1"/>

                  <DataGrid ItemsSource="{Binding itemSubDisplayList2}" x:Name="dgItemSub">

                                        <DataGrid.Columns>
                                            <DataGridTextColumn Header="item sub" Binding="{Binding ItemIdSub}"/>
                                            <DataGridTextColumn Header="item sub code" Binding="{Binding ItemSubCode}"/>
                                        </DataGrid.Columns>
                                    </DataGrid>
             </Grid>
            </StackPanel>
           </DataTemplate>
          </DataGrid.RowDetailsTemplate>
    </DataGrid>

我需要在此數據網格中綁定兩個列表或源。 對於datagrid.column和文本框Discount (在RowDetailsTemplate中),其使用itemsSource = itemDisplayList而對於在dgItemSub中的項目,其使用itemsSource itemSubDisplayList2

關鍵是我的代碼后面有這個代碼

 dgDisplay.ItemsSource = itemDisplayList;
 dgDisplay.ItemsSource = itemSubDisplayList2;

但似乎我不能同時使用兩者。 僅綁定到itemSubDisplayList2有效。 但是,如果我不這樣做,則不會在我的數據網格內顯示任何輸出。

我嘗試過這樣的事情

  <DataGrid Name="dgDisplay" ItemsSource="{Binding itemDisplayList}">

<DataGrid ItemsSource="{Binding itemSubDisplayList2}" x:Name="dgItemSub"> 

無需執行dgDisplay.ItemsSource = itemDisplayList; dgDisplay.ItemsSource = itemSubDisplayList2; 在后面的代碼,但沒有用。

我如何從這2個項目源綁定?

還是有一種方法可以從后面的代碼訪問dgItemSub 就像我想要這樣的事情

dgItemSub.ItemsSource = itemSubDisplayList2;

這是我編碼itemDisplayListitemSubDisplayList2 ,我在后面的代碼中編碼

       ItemDisplay itemDisplay = new ItemDisplay()
                    {
                        ItemCode = item.ItemCode,
                        ItemName = item.ItemName,
                        ItemPrice = item.ItemPrice,
                        Quantity = 1,
                    };

                    itemDisplayList.Add(itemDisplay);


                    foreach (var id in itemIds)
                    {
                        SimpleItem item2 = simpleItemBO.GetItemByItemId(id);
                        itemList.Add(item2);

                        ItemSubDisplay itemSubDisplay = new ItemSubDisplay();
                        itemSubDisplay.ItemIdSub = item2.ItemId;
                      itemSubDisplay.ItemSubCode = item2.ItemCode;
                        itemSubDisplayList.Add(itemSubDisplay);
                    }

                    itemSubDisplayList2.AddRange(itemSubDisplayList);

您好,我檢查了這段代碼,在這里您做了一些錯誤,所以我修改了它Xaml

 <DataGrid  Name="dgDisplay" AutoGenerateColumns="False" CanUserAddRows="False" >
            <DataGrid.Columns>
                <DataGridTextColumn IsReadOnly="True" x:Name="dgItemCode" Width="100" Header="Barcode" Binding="{Binding ItemCode}" />
                <DataGridTextColumn IsReadOnly="True" x:Name="dgItemName" Width="200" Header="Item Name" Binding="{Binding ItemName}" />
                <DataGridTextColumn IsReadOnly="True" x:Name="dgItemPrice" Width="100" Header="Item Price" Binding="{Binding ItemPrice, StringFormat=RM {0}}" />
                <DataGridTextColumn IsReadOnly="True" x:Name="dgQuantity" Width="150" Header="Quantity" Binding="{Binding Quantity, UpdateSourceTrigger=PropertyChanged}"   />
            </DataGrid.Columns>

            <DataGrid.RowDetailsTemplate >
                <DataTemplate  x:Name="dtItemDisplay"  >
                    <StackPanel  Name="spItemDisplay2" HorizontalAlignment="Stretch" Background="White" >
                        <Grid>
                            <TextBlock Text="Discount: " FontWeight="Bold" Grid.Column="2" Grid.Row="1"/>
                            <TextBox   x:Name="txtDisc" Text="{Binding Discount, UpdateSourceTrigger=PropertyChanged}" Grid.Column="3" Grid.Row="1"/>

                            <DataGrid ItemsSource="{Binding itemSubDisplayList}" x:Name="dgItemSub" AutoGenerateColumns="False"  CanUserAddRows="False">

                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="item sub" Binding="{Binding ItemIdSub}"/>
                                    <DataGridTextColumn Header="item sub code" Binding="{Binding ItemSubCode}"/>
                                </DataGrid.Columns>
                            </DataGrid>
                        </Grid>
                    </StackPanel>
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>
        </DataGrid>

   public partial class MainWindow : Window
        {

            public List<ItemDisplay> itemDisplayList { get; set; }

            public MainWindow()
            {
                InitializeComponent();

                this.DataContext = this;

                itemDisplayList = new List<ItemDisplay>();
                ItemDisplay itemDisplay = new ItemDisplay()
                {
                    ItemCode = "1",
                    ItemName = "1",
                    ItemPrice = "1",
                    Quantity = "1",
                    itemSubDisplayList = new List<ItemSub>()
                };
                itemDisplay.itemSubDisplayList.Add(new ItemSub { ItemIdSub = "sa", ItemSubCode = "ran" });
                itemDisplayList.Add(itemDisplay);

                dgDisplay.ItemsSource = itemDisplayList;

            }


  public class ItemDisplay
    {
        public string ItemCode { get; set; }
        public string ItemPrice { get; set; }
        public string ItemName { get; set; }
        public string Quantity { get; set; }
        public List<ItemSub> itemSubDisplayList { get; set; }
    }


    public class ItemSub
    {
        public string ItemIdSub { get; set; }
        public string ItemSubCode { get; set; }
    }

輸出 輸出SS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM