Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中将datagrid与两个itemsSource绑定?_C#_Wpf_Data Binding_Datagrid - Fatal编程技术网

C# 如何在WPF中将datagrid与两个itemsSource绑定?

C# 如何在WPF中将datagrid与两个itemsSource绑定?,c#,wpf,data-binding,datagrid,C#,Wpf,Data Binding,Datagrid,我的xaml中有类似的东西 <DataGrid Name="dgDisplay" > <DataGrid.Columns> <DataGridTextColumn IsReadOnly="True" x:Name="dgItemCode" Width="100" Header="Barcode" Binding="{Binding ItemCode}" /> <DataGridTextColumn Is

我的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>
但我似乎不能两者兼用。只有绑定到
itemSubDisplayList2
的项才能工作。但如果我不这样做,它不会在我的数据网格中显示任何输出

我试过这样的东西

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

<DataGrid ItemsSource="{Binding itemSubDisplayList2}" x:Name="dgItemSub"> 
dgItemSub.ItemsSource = itemSubDisplayList2;
这就是我如何编码
itemsdisplaylist
itemssubdisplaylist2
的方法,我在代码隐藏处进行编码

       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; }
    }
公共部分类主窗口:窗口
{
公共列表项DisplayList{get;set;}
公共主窗口()
{
初始化组件();
this.DataContext=this;
itemDisplayList=新列表();
ItemDisplay ItemDisplay=新建ItemDisplay()
{
ItemCode=“1”,
ItemName=“1”,
ItemPrice=“1”,
Quantity=“1”,
itemSubDisplayList=新列表()
};
itemsdisplay.itemSubDisplayList.Add(newitemsub{ItemIdSub=“sa”,ItemSubCode=“ran”});
itemDisplayList.Add(itemDisplay);
dgDisplay.ItemsSource=项目显示列表;
}
公共类项目显示
{
公共字符串ItemCode{get;set;}
公共字符串ItemPrice{get;set;}
公共字符串ItemName{get;set;}
公共字符串数量{get;set;}
公共列表项subdisplaylist{get;set;}
}
公共类ItemSub
{
公共字符串itemiSub{get;set;}
公共字符串ItemSubCode{get;set;}
}
输出

您是否使用mvvm?是否需要在mvvm中执行此操作?是的,我确实使用mvvm,但我会在我的代码后面编写
itemsdisplaylist
itemssubdisplaylist2
,如果您从外部设置数据上下文,则需要指定
作为模板中的数据上下文。如果不起作用,请尝试发布where u r设置datacontext,也会这样做
itemSubDisplayList2
commom到
itemsdisplaylist
中的所有行,我已经尝试了你的代码和它的工作。但是我有一个问题,正如你在上文中看到的
itemSubDisplayList
我有一个foreach循环。我如何应用这个循环?@newbie,正如你说的,每一行都有不同的子项,所以你需要在u中获取一个列表,或者主l正如我在上面所说的,在改变for循环时,我无法帮助它的依赖域的需要检查剩余的代码,我们可以做出适当的修改dession@newbie这只是一个例子。填充数据依赖于域。太感谢你了!你救了我的命:)它工作得太棒了!@newbie这是一个糟糕的答案,因为它不能解释n任何东西。只有“你犯了一些错误”,而没有说明这些错误的确切内容。发布一堆代码并不能给出一个好的答案,即使代码正是你所需要的。请记住StackOverflow是一个社区,帖子应该对所有读者都有用。
   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; }
    }