powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Не отслеживается изменение зависимого свойства
6 сообщений из 6, страница 1 из 1
Не отслеживается изменение зависимого свойства
    #38778858
beowulf_21_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 2 компонента, соединяемых по зависимому свойству класса
Код: 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.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
public class StackerWorkData : INotifyPropertyChanged 
        {
            private Int32 _X;
            public Int32 X
            {
                get
                {
                    return _X;
                }
                set
                {
                    _X = value;
                    OnPropertyChanged("X");
                }
            }

            private Int32 _Y;
            public Int32 Y
            {
                get
                {
                    return _Y;
                }
                set
                {
                    _Y = value;
                    OnPropertyChanged("Y");
                }
            }


            private Int32 _Z;
            public Int32 Z
            {
                get
                {
                    return _Z;
                }
                set
                {
                    _Z = value;
                    OnPropertyChanged("Z");
                }
            }

            private Int32 _cell;
            public Int32 Cell
            {
                get
                {
                    return _cell;
                }
                set
                {
                    _cell = value;
                    OnPropertyChanged("Cell");
                }
            }

            private StackerCommand _cmd;
            public StackerCommand cmd
            {
                get
                {
                    return _cmd;
                }
                set
                {
                    _cmd = value;
                    OnPropertyChanged("cmd");
                }
            }


            /// <summary>
            /// Occurs when a property value changes.
            /// </summary>
            public event PropertyChangedEventHandler PropertyChanged;

            /// <summary>
            /// Called when [property changed].
            /// </summary>
            /// <param name="name">The name.</param>
            private void OnPropertyChanged(string name)
            {
                if (PropertyChanged != null)//BiopsyCore
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(name));
                }
            }


        }


в компоненте StackerManBNR:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// Dependency Property
        public static readonly DependencyProperty WorkParamsDP = DependencyProperty.Register("WorkParams", typeof(ItemsChangeObservableCollection<StackerWorkData>), typeof(StackerManBNR), new FrameworkPropertyMetadata(null, DepParamsChanged));
        // .NET Property wrapper
        public ItemsChangeObservableCollection<StackerWorkData> WorkParams
        {
            get
            {
                return (ItemsChangeObservableCollection<StackerWorkData>)GetValue(WorkParamsDP);
            }
            private set { 
                SetValue(WorkParamsDP, value); 
            }
        }


в компоненте StackerControl :
Код: 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.
// Dependency Property
        public static readonly DependencyProperty WorkParamsDP = DependencyProperty.Register("WorkParams", typeof(ItemsChangeObservableCollection<StackerWorkData>), typeof(StackerControl), new UIPropertyMetadata(null, DepParamsChanged));
        // .NET Property wrapper
        private static readonly DependencyPropertyDescriptor WorkparamsDP_PD = DependencyPropertyDescriptor.FromProperty(WorkParamsDP, typeof(StackerControl));
        [Description("Stacker parameters"), Category("Stacker")]
        public ItemsChangeObservableCollection<StackerWorkData> WorkParams
        {
            get
            {
                return (ItemsChangeObservableCollection<StackerWorkData>)GetValue(WorkParamsDP);
            }
            set { SetValue(WorkParamsDP, value); }
        }

private static void DepParamsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            StackerControl ctrl = (StackerControl)d;
            if (e.Property.Name == "WorkParams")
            { 
            
            }
            ctrl.SetParam(e.Property.Name, e.NewValue, e.OldValue);
             
        }

...
  case "WorkParams":
                    try
                    {
                        LoadConfig();
                        var rd = (from c in this.Coords_Points where (Convert.ToInt32(c.Attribute("X").Value) >= WorkParams[0].X) orderby c.Attribute("X").Value select c).ToList<XElement>();
                        Int32 col = GetButtonX(Convert.ToInt32(rd[0].Attribute("ID").Value));
                        Grid.SetColumn(stacker_base,col);
                    }
                    catch (System.Exception exc)
                    { 
                    }
                    break;
...
WorkParams = new ItemsChangeObservableCollection<StackerWorkData>();
                //WorkParams.CollectionChanged += new NotifyCollectionChangedEventHandler(WorkParams_CollectionChanged);
                WorkParams.Add(new StackerWorkData());

                WorkparamsDP_PD.AddValueChanged(this, delegate
                    { 
                
                    });


StackerControl слушает свойство WorkParams контрола StackerManBNR.

Код: xml
1.
<my:StackerControl  ... WorkParams="{Binding ElementName=stacker1_man, Path=WorkParams}"></my:StackerControl>



Свойство WorkParams изменяется, но момент изменения этого свойства, в частности когда меняются X,Y,Z не улавливается программой.
...
Рейтинг: 0 / 0
Не отслеживается изменение зависимого свойства
    #38779211
beowulf_21_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В проге есть 2 контрола. У них есть одинаковое зависимого свойство кастомного класса, наследующего интерфейс INotifyPropertyChanged. В программе контрол A слушает данное свойство контрола B. Само значение этого свойства меняется (все его поля. проверил), но сам момент изменения его не удается уловить обычным PropertyChangedCallback, который задается при DependencyProperty.Register. Значение меняется, а к этому колбэку не переходит управление.
Код класса этого свойства:
Код: 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.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
public class StackerWorkData : INotifyPropertyChanged 
        {
            private Int32 _X;
            public Int32 X
            {
                get
                {
                    return _X;
                }
                set
                {
                    _X = value;
                    OnPropertyChanged("X");
                }
            }

            private Int32 _Y;
            public Int32 Y
            {
                get
                {
                    return _Y;
                }
                set
                {
                    _Y = value;
                    OnPropertyChanged("Y");
                }
            }


            private Int32 _Z;
            public Int32 Z
            {
                get
                {
                    return _Z;
                }
                set
                {
                    _Z = value;
                    OnPropertyChanged("Z");
                }
            }

            private Int32 _cell;
            public Int32 Cell
            {
                get
                {
                    return _cell;
                }
                set
                {
                    _cell = value;
                    OnPropertyChanged("Cell");
                }
            }

            private StackerCommand _cmd;
            public StackerCommand cmd
            {
                get
                {
                    return _cmd;
                }
                set
                {
                    _cmd = value;
                    OnPropertyChanged("cmd");
                }
            }


            /// <summary>
            /// Occurs when a property value changes.
            /// </summary>
            public event PropertyChangedEventHandler PropertyChanged;

            /// <summary>
            /// Called when [property changed].
            /// </summary>
            /// <param name="name">The name.</param>
            private void OnPropertyChanged(string name)
            {
                if (PropertyChanged != null)//BiopsyCore
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(name));
                }
            }


        }



StackerControl слушает свойство WorkParams контрола StackerManBNR.

Код: xml
1.
<my:StackerControl  ... WorkParams="{Binding ElementName=stacker1_man, Path=WorkParams}"></my:StackerControl>



Свойство WorkParams изменяется, но момент изменения этого свойства, в частности когда меняются X,Y,Z не улавливается программой.
...
Рейтинг: 0 / 0
Не отслеживается изменение зависимого свойства
    #38780346
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно поможет UpdateSourceTrigger=PropertyChanged
...
Рейтинг: 0 / 0
Не отслеживается изменение зависимого свойства
    #38780388
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав,

думаю проблема не в этом, но человек так объясняет, что непонятно, где у него и что...
...
Рейтинг: 0 / 0
Не отслеживается изменение зависимого свойства
    #38783834
Фотография @k@DElpher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, как-то криво спрошено.
авторСвойство WorkParams изменяется, но момент изменения этого свойства, в частности когда меняются X,Y,Z не улавливается программой.
Происходит полная замена WorkParams или только его поля? Если в WorkParams один и тот же объект, то PropertyChangedCallback не будет вызываться. То есть WorkParams.X=33 изменит поле, но не вызовет PropertyChangedCallback.
...
Рейтинг: 0 / 0
Не отслеживается изменение зависимого свойства
    #38787765
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что такое WorkParams? проблема видимо там, а не в StackerWorkData.
Возможно одного DependencyProperty.Register маловато будет для того чтобы что то происходило.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Не отслеживается изменение зависимого свойства
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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