これは私がWPFで達成しようとしていることです。タイトルとしてのテキストブロックとボタンの下wrappanel
。paneltemplate として stackpanel を持つ ItemsControl があり、その itemtemplate は textblock と wrappanel です。
動作しますが、アイテム数が多い場合、遅い intel gma + atom マシンでのインスタンス化が遅くなります。レンダリングが問題ではなく、ビジュアル ツリーの作成のようです。ここでの私の唯一の賭けは、仮想化を使用してカスタムパネルを作成することです。
これが私がやったことです。
http://pastebin.com/u8C7ddP0
上記のソリューションは一部のマシンで遅いです。
遅いマシンで作成するのに最大100ミリ秒かかるソリューションを探しています。ありがとうございました
アップデート
public class PreferenceCheckedConvertor : IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
var preference = values[0] as OrderItemPreference;
var items = values[1] as ObservableCollection<OrderItemPreference>;
var found = items.FirstOrDefault(item => item.Preference.Id == preference.Preference.Id);
if (found == null)
{
return false;
}
return true;
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
try
{
return null;
}
catch (Exception e)
{
return null;
}
}
}
ff
public class PreferenceConvertor : IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
var preferences=values[0] as IEnumerable<Preference>;
var items=values[1] as ObservableCollection<OrderItemPreference>;
var newList = new List<OrderItemPreference>(preferences.Count());
foreach (var preference in preferences)
{
var curItem = items.FirstOrDefault(item => item.Preference.Id == preference.Id);
if (curItem == null)
{
newList.Add(new OrderItemPreference()
{
Preference = preference
});
}
else
{
newList.Add(curItem);
}
}
return newList;
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
try
{
return null;
}
catch (Exception e)
{
return null;
}
}}