powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF Странный глюк с зависимым свойством-коллекцией
6 сообщений из 6, страница 1 из 1
WPF Странный глюк с зависимым свойством-коллекцией
    #38759726
beowulf_21_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал UserControl там зависимое свойство-коллекция. На форме разместил несколько таких контролов с разными параметрами. Но почему-то каждый из этих контролов видит это свойство не как набор всех элементов заданных внутри него, а как конкатенацию коллекций, заданных для всех контролов, размещенных на форме.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<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#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
// 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);
 
        }
...
Рейтинг: 0 / 0
WPF Странный глюк с зависимым свойством-коллекцией
    #38759877
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public static readonly DependencyProperty PointsEmptyRightDP = 
    DependencyProperty.Register(
        "PointsEmptyRight", 
        typeof(ItemsChangeObservableCollection<GridPoint>), 
        typeof(StackerControl), 
        new FrameworkPropertyMetadata(
            new ItemsChangeObservableCollection<GridPoint>(), // <== это
            DepParamsChanged
        )
    );

Потому что Default Value одно для всех свойств данного типа.
...
Рейтинг: 0 / 0
WPF Странный глюк с зависимым свойством-коллекцией
    #38761010
beowulf_21_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

И что теперь делать? Нет, ну я же ведь не написал там ссылку на переменную, которая уже инициализированна этим конструктором. Тогда я бы понял. Но это же вроде абсолютно разные области в памяти, чего общего у них?
...
Рейтинг: 0 / 0
WPF Странный глюк с зависимым свойством-коллекцией
    #38761467
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инициализация свойства "по умолчанию" происходит 1 раз. Нужно в свойстве "по умолчанию" указать "Null"
...
Рейтинг: 0 / 0
WPF Странный глюк с зависимым свойством-коллекцией
    #38761482
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не забудьте в конструкторе класса UserControl'а создать объект коллекции для этого свойства через
SetValue(PointsEmptyRightDP, new ItemsChangeObservableCollection<GridPoint>());
и вроде как свойства зависимости принято заканчивать на Property, а не на DP
...
Рейтинг: 0 / 0
WPF Странный глюк с зависимым свойством-коллекцией
    #38761618
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beowulf_21_xАлексей К,

И что теперь делать? Нет, ну я же ведь не написал там ссылку на переменную, которая уже инициализированна этим конструктором. Тогда я бы понял. Но это же вроде абсолютно разные области в памяти, чего общего у них?Зачем тебе тут DependencyProperty? Делай обычное свойство. Смотри как сделано свойство ItemsControl.Items .
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF Странный глюк с зависимым свойством-коллекцией
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]