Здравствуйте! Сегодня: Сб, 21 Сен 2019, Ваш IP: 3.226.243.130 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Программирование для MS Windows
+ Создать новую тему Страница: 1
Тема: C# WPF Не отслеживается изменение зависимого свойства · +  +  дата добавления: 16.10.2014 / 22:33
Автор темы:
the1datr
the1datr
тем: 1 / ответов: 0 / благодарностей: 0 / репутация: 0
ответов: 0
создал(а) тем: 1


В проге есть 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 не улавливается программой.
Технологии: .NET Framework, C#, XAML
 
Ответ # 1 # · +x1 +  дата добавления: 22.10.2014 / 22:55
Автор ответа:
Shark1
Shark1
тем: 3 / ответов: 153 / благодарностей: 5 / репутация: 82
Чашка Kbyte.Ru>>
ответов: 153
создал(а) тем: 3


Попробуй вместо :

private void OnPropertyChanged(string name)
	{
		//BiopsyCore
		if (PropertyChanged != null) {
			PropertyChanged(this, new PropertyChangedEventArgs(name));
		}
	}

написать так :

public void OnPropertyChanged(string propertyName)
	{
		System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChangedEvent;
		if (handler != null) {
			if (PropertyChanged != null) {
				PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
			}
		}
	}
 
Страница: 1 + Создать новую тему