Ответить Создать тему

C# WPF Странный глюк с зависимым свойством-коллекцией , Спрашивал на разных форумах, не найду ответа

1datr
post Sep 29 2014, 17:43 
Отправлено #1


Продвинутый

Сообщений: 183



Сделал UserControl там зависимое свойство-коллекция. На форме разместил несколько таких контролов с разными параметрами. Но почему-то каждый из этих контролов видит это свойство не как набор всех элементов заданных внутри него, а как конкатенацию коллекций, заданных для всех контролов, размещенных на форме.
Исходный код
<my1:CommonCtrlKirishi Rows="22" Floors="12">
               <my1:CommonCtrlKirishi.PointsEmptyLeft>
                   <my1:GridPoint X="0" Y="0" />
                   <my1:GridPoint X="0" Y="1" />
                   ...
                   <my1:GridPoint X="0" Y="10" />                    
               </my1:CommonCtrlKirishi.PointsEmptyLeft>


           </my1:CommonCtrlKirishi>
       </TabItem>
       <TabItem Header="Штабелер 2">

           <my1:CommonCtrlKirishi StackerID="2" Rows="22" Floors="12">

               <my1:CommonCtrlKirishi.PointsEmptyLeft>
                   <my1:GridPoint X="0" Y="0" />
                   <my1:GridPoint X="0" Y="1" />
                   ...
                   <my1:GridPoint X="0" Y="9" />
                   <my1:GridPoint X="0" Y="10" />
                   <my1:GridPoint X="0" Y="11" />
               </my1:CommonCtrlKirishi.PointsEmptyLeft>
               <my1:CommonCtrlKirishi.PointsEmptyRight>                  
                   <my1:GridPoint X="0" Y="1" />
                   <my1:GridPoint X="0" Y="2" />
                   ...
                   <my1:GridPoint X="0" Y="10" />
                   <my1:GridPoint X="0" Y="11" />
               </my1:CommonCtrlKirishi.PointsEmptyRight>
           </my1:CommonCtrlKirishi>

Код свойства контрола:
Исходный код
// Dependency Property
       public static readonly DependencyProperty PointsEmptyLeftDP = DependencyProperty.Register("PointsEmptyLeft", typeof(ObservableCollection<GridPoint>), typeof(StackerControl), new FrameworkPropertyMetadata(new ObservableCollection<GridPoint>(),DepParamsChanged));
       // .NET Property wrapper
       [Description("Free points in left rack"), Category("Stacker")]
       public ObservableCollection<GridPoint> PointsEmptyLeft
       {
           get
           {
               return (ObservableCollection<GridPoint>)GetValue(PointsEmptyLeftDP);
           }
           set
           {
               SetValue(PointsEmptyLeftDP, value);

           }
       }

       // Dependency Property
       public static readonly DependencyProperty PointsEmptyRightDP = DependencyProperty.Register("PointsEmptyRight", typeof(ItemsChangeObservableCollection<GridPoint>), typeof(StackerControl), new FrameworkPropertyMetadata(new ItemsChangeObservableCollection<GridPoint>(), DepParamsChanged));
       // .NET Property wrapper
       [Description("Free points in right rack"), Category("Stacker")]
       public ItemsChangeObservableCollection<GridPoint> PointsEmptyRight
       {
           get
           {
               return (ItemsChangeObservableCollection<GridPoint>)GetValue(PointsEmptyRightDP);
           }
           set
           {
               SetValue(PointsEmptyRightDP, value);

           }
       }

public void SetParam(String propname, Object val, object oldval)
       {
           switch (propname)
           {
              ...
               case "PointsEmptyLeft":
                   restruct_left();
                   set_cell_styles();
                   break;
               case "PointsEmptyRight":
                   restruct_right();
                   set_cell_styles();
                   break;
           }
       }

       private static void DepParamsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
       {
           StackerControl ctrl = (StackerControl)d;

           ctrl.SetParam(e.Property.Name, e.NewValue, e.OldValue);

       }

На одном форуме (http://www.sql.ru/forum/1117991-a/wpf-strannyy-gluk-s-zavisimym-svoystvom-kollekciey )сказали, что это из-за того, что Default Value одно для всех свойств данного типа. Но как с этим быть? Почему они должны быть разного типа? Это же вроде совершенно разные свойства.
Profile CardPM
  0/0  
MrHammer
post Sep 29 2014, 18:07 
Отправлено #2


Продвинутый

Сообщений: 129



Profile CardPM
  0/0  
1datr
post Sep 29 2014, 19:55 
Отправлено #3


Продвинутый

Сообщений: 183



Не катит. Ошибки идут.
Profile CardPM
  0/0  
1datr
post Sep 29 2014, 20:44 
Отправлено #4


Продвинутый

Сообщений: 183



Вообще сколько не пробовал примеров, коих вроде бы полно получаю то же самое - общая коллекция. Ставишь значение по умолчанию в null - ошибка.
Profile CardPM
  0/0  
MrHammer
post Sep 29 2014, 21:28 
Отправлено #5


Продвинутый

Сообщений: 129



Попробуй оформить PointsEmpty... оформить в виде отдельного класса. А остальное уже как в примере.
Profile CardPM
  0/0  

ОтветитьTopic Options
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
Быстрый ответ
Кнопки кодов
 Расширенный режим
 Нормальный режим
    Закрыть все тэги


Открытых тэгов: 
Введите сообщение
Смайлики
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
         
Показать все

Опции сообщения