![](/img/trans.png)
[英]WPF How to Bind an Image to a DataGrid column as a property of the ItemsSource?
[英]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;
這是我編碼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);
您好,我檢查了這段代碼,在這里您做了一些錯誤,所以我修改了它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; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.