5

これは私が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;
            }
        }}

ここに画像の説明を入力

4

1 に答える 1