2 種類の xml ドキュメントをロードする必要があります。1 つは 50 のサブ子を持ち、もう 1 つは同じ 50 と 800 の追加の子を持ちます。子の数が増えるまでは、小さなドキュメントでパフォーマンスが優れており、大きなドキュメントで許容範囲内です。20,000 人の子供 * 50 人のサブ子供 = 素晴らしいパフォーマンス、20,000 人の子供 * 850 人のサブ子供 = 遅いパフォーマンス。余分な子孫が存在しない場合、それらの検索をスキップするにはどうすればよいですか? 私の最初の試みは、小さなドキュメントと大きなドキュメントの両方に対して、個別のクラス、メソッド、ビューモデル、およびビューが必要であると考えるようになりました。以下は、私のコードを要約したものです。
public class MyItem
{
private string layout;
private string column;
private string columnSpan;
private string row;
private string rowSpan;
private string background;
public MyItem(string layout, string column, string columnSpan, string row, string rowSpan, string background)
{
Layout = layout;
Column = column;
ColumnSpan = columnSpan;
Row = row;
RowSpan = rowSpan;
Background = background;
}
public string Layout
{
get { return this.layout; }
set { this.layout = value; }
}
(非表示 - レイアウトと同じ方法で処理される Column、ColumnSpan、Row、RowSpan、および Background)
この例では、以下に 6 つのサブ子のみを示しています。最初の 2 つのサブ子のみを含む xml ドキュメントをロードする方法を探しています。このようにして、小規模または大規模な xml ドキュメントの両方で必要とされる読み込み方法を使用できます。
internal class myDataSource
{
//Loads (MyList) xml file
public static List<MyItem> Load(string MyListFilename)
{
var myfiles = XDocument.Load(MylistFilename).Descendants("item").Select(
x => new MyItem(
(string)x.Element("layout"),
(string)x.Element("column"),
(string)x.Element("columnSpan"),
(string)x.Element("row"),
(string)x.Element("rowSpan"),
(string)x.Element("background")));
return myfiles.ToList();
}
public class MainViewModel : ViewModelBase
{
public void LoadMyList()
{
this.myfiles = new ObservableCollection<MyItemViewModel>();
List<MyItem> mybaseList = myDataSource.Load(MyListFilename);
foreach (MyItem myitem in mybaseList)
{
this.myfiles.Add(new MyItemViewModel(myitem));
}
this.mycollectionView = (ICollectionView)CollectionViewSource.GetDefaultView(myfiles);
if (this.mycollectionView == null)
throw new NullReferenceException("mycollectionView");
}
}
public class MyItemViewModel: ViewModelBase
{
private Models.MyItem myitem;
public MyItemViewModel(MyItem myitem)
{
if (myitem == null)
throw new NullReferenceException("myitem");
this.myitem = myitem;
}
public string Layout
{
get
{
return this.myitem.Layout;
}
set
{
this.myitem.Layout = value;
OnPropertyChanged("Layout");
}
}
(非表示 - レイアウトと同じ方法で処理される Column、ColumnSpan、Row、RowSpan、および Background)