简体   繁体   中英

Pointers vs deep copies in C# WPF

I am populating a list which I am displaying in a WPF datagrid, however, when I add the o object to the list I am only getting a pointer. When I go to display in the datagrid all of the rows are identical and equal to the list record in btcusdDepth.Asks . How can I ensure that record is a deep copy of the data?

var o = new OrderDataObject();
var bidMktOrders = new List<OrderDataObject>();
var askMktOrders = new List<OrderDataObject>();

foreach (var quote in btcusdDepth.Asks)
{
  o.orderAmt = quote.Amount.ToString();
  o.orderPrice = quote.Price.ToString();
  askMktOrders.Add(o);
}
mktDepth.ItemsSource = askMktOrders;

A single object exists for each time new is invoked, so you only have one OrderDataObject that you're simply updating the values to.

Do this instead:

var bidMktOrders = new List<OrderDataObject>();
var askMktOrders = new List<OrderDataObject>();

foreach (var quote in btcusdDepth.Asks)
{
    var o = new OrderDataObject();
    o.orderAmt = quote.Amount.ToString();
    o.orderPrice = quote.Price.ToString();
    askMktOrders.Add(o);
}
mktDepth.ItemsSource = askMktOrders;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM