Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2014, 22:18   #1
magnuz
Пользователь
 
Регистрация: 07.08.2012
Сообщений: 34
По умолчанию Не отслеживается изменение зависимого свойства

В проге есть 2 контрола. У них есть одинаковое зависимого свойство кастомного класса, наследующего интерфейс INotifyPropertyChanged. В программе контрол A слушает данное свойство контрола B. Само значение этого свойства меняется (все его поля. проверил), но сам момент изменения его не удается уловить обычным PropertyChangedCallback, который задается при DependencyProperty.Register. Значение меняется, а к этому колбэку не переходит управление.
Код класса этого свойства:
Код:
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.

Код:
<my:StackerControl  ... WorkParams="{Binding ElementName=stacker1_man, Path=WorkParams}"></my:StackerControl>
Свойство WorkParams изменяется, но момент изменения этого свойства, в частности когда меняются X,Y,Z не улавливается программой.
magnuz вне форума Ответить с цитированием
Старый 16.10.2014, 22:36   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Так оно и не должно отслеживаться, вы же на них не биндитесь
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 16.10.2014, 22:50   #3
magnuz
Пользователь
 
Регистрация: 07.08.2012
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
Так оно и не должно отслеживаться, вы же на них не биндитесь
То есть как? Я привязал свойство WorkParams одного объекта к свойству WorkParams. Там же есть NotifyChanged и пр. Мне что все свойства X,Y,Z делать в виде зависимых свойств?
magnuz вне форума Ответить с цитированием
Старый 17.10.2014, 10:52   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Если бы у вас был биндинг типа "{Binding WorkParams.X}", то изменение "X" и отслеживалось бы. У вас же биндинг "{Binding WorkParams}", и отслеживается только изменение самой переменной "WorkParams" (при вызове PropertyChanged("WorkParams") конечно же). Изменения внутренней структуры объекта (т.е. ваших x,y,z) здесь ни к чему не привязаны и никак не отслеживаются. Вы видимо не совсем верно понимаете механизм работы PropertyChanged. И перевод этих свойств в DependencyProperty тоже ничего не изменит
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Делфи] изменение свойства объекта через sender tobject POCOMAXA Помощь студентам 3 20.06.2013 21:39
IdUDPServer. Изменение свойства DefaultPort cactus628 Работа с сетью в Delphi 0 02.03.2012 08:39
Изменение свойства width в тегах через PHP Kasper1 PHP 6 09.03.2011 10:05
Свойства компонентов. Изменение значений sergeev_2005 Microsoft Office Word 1 27.10.2009 15:54
изменение свойства datasource c adotable на adoquery koma Общие вопросы Delphi 3 01.10.2009 13:47