Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: C# WPF Странный глюк с зависимым свойством-коллекцией  (Прочитано 6950 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
1datr
Читатель

ru
Offline Offline

« : 28-09-2014 05:18 » 

Сделал UserControl там зависимое свойство-коллекция. На форме разместил несколько таких контролов с разными параметрами. Но почему-то каждый из этих контролов видит это свойство не как набор всех элементов заданных внутри него, а как конкатенацию коллекций, заданных для всех контролов, размещенных на форме.
XAML :
Код: (XML)
<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>
Код свойства контрола:
Код: (C#)
// 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);
             
        }
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #1 : 02-10-2014 04:08 » new

я не спец в C#, но мне почему-то кажется вот из-за этого
Код:
public static readonly 
Цитата
A non-static class can contain static methods, fields, properties, or events. The static member is callable on a class even when no instance of the class has been created. The static member is always accessed by the class name, not the instance name. Only one copy of a static member exists, regardless of how many instances of the class are created
Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines