using System;
using System.Collections.ObjectModel;
public sealed class Foo
{
private readonly ObservableCollection<ObservableCollection<string>> _data;
public Foo()
{
_data = new ObservableCollection<ObservableCollection<string>>();
for (var i = 0; i<10; i++)
{
var t = new ObservableCollection<string>();
for (var j = 0; j<10; j++)
{
t.Add(i + "+" + j);
}
_data.Add(t);
}
var tmp = new ObservableCollection<ReadOnlyObservableCollection<string>>();
foreach (var row in _data)
{
tmp.Add(new ReadOnlyObservableCollection<string>(row));
}
Data = new ReadOnlyObservableCollection<ReadOnlyObservableCollection<string>>(tmp);
Console.WriteLine("Initial row count:");
Console.WriteLine("_data: " + _data.Count);
Console.WriteLine("Data: " + Data.Count);
Console.WriteLine("Removing item with index (0,0)");
RemoveItem(0,0);
Console.WriteLine("Curent item count for 0th row:");
Console.WriteLine("_data: " + _data[0].Count);
Console.WriteLine("Data: " + Data[0].Count);
Console.WriteLine("Removing the 0th row");
RemoveRow(0);
Console.WriteLine("Current row count:");
Console.WriteLine("_data: " + _data.Count);
Console.WriteLine("Data: " + Data.Count);
}
public ReadOnlyObservableCollection<ReadOnlyObservableCollection<string>> Data { get; }
public void RemoveItem(int x, int y)
{
_data[x].RemoveAt(y); // This does update the UI.
}
public void RemoveRow(int x)
{
_data.RemoveAt(x); // This does not update the UI.
}
}
public class Test
{
public static void Main()
{
var f = new Foo();
}
}