【发布时间】:2019-04-17 02:10:19
【问题描述】:
我的 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 个 itemsSource 绑定?
或者有什么方法可以让我从后面的代码中访问dgItemSub。就像我想要这样的东西
dgItemSub.ItemsSource = itemSubDisplayList2;
这就是我编码itemDisplayList 和itemSubDisplayList2 的方式,我在后面的代码中编码
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);
【问题讨论】:
-
你在使用 mvvm 吗?这需要在mvvm中完成吗?
-
是的,我确实使用 mvvm,但我在后面的代码中编码
itemDisplayList和itemSubDisplayList2 -
如果你从外部设置数据上下文,你需要指定
<DataGrid x:Name="dgItemSub" ItemsSource="{Binding DataContext.itemSubDisplayList2}"你需要使用类似的东西 -
因为它存在于模板中。如果不起作用,请尝试发布您在哪里设置 DataContext
-
这个
itemSubDisplayList2也会与itemDisplayList中的所有行共享
标签: c# wpf data-binding datagrid