PropertyChangedEventHandler не работает

1

У меня есть следующий ярлык и ползунок в моем UserControl xaml

<Label x:Name="labelValX" Content="{Binding Path=xValue}" HorizontalAlignment="Left" Width="88" Height="44"/>

 <Slider x:Name="sliderSpeed" Value="{Binding slideValue, Mode=TwoWay}" HorizontalAlignment="Left" Margin="10,35,0,0" VerticalAlignment="Top" Width="173" Height="53" Minimum="10" Maximum="100" />

и конкретный класс SetGetAccValues.cs:

public class SetGetAccValues : UserControl, INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;


    private string _xval;
    public string xValue
    {
        get { return _xval; }
        set
        {
            if (value != _xval)
            {
                _xval = value;
                OnPropertyChanged("xValue");
            }
        }
    }

    public byte _slideValue;  
    public byte slideValue {
            get
            {
                return _slideValue;
            }
            set
            {
                if (value != _slideValue)
                {
                    _slideValue = value;
                    OnPropertyChanged("slideValue");
                }
            }
          }


   protected virtual void OnPropertyChanged(string propName)
   {
      if (PropertyChanged != null)
       {
           PropertyChanged(this, new PropertyChangedEventArgs(propName));
           if (propName.Equals("slideValue"))
           {
           speedAccMeter(slideValue); 
           }
       }
   }

В моем другом классе GetAccNotifications.cs у меня есть следующая часть, где я определяю строку xValue для определенного значения:

Y = ((double)(sbyte)value) / 64.0;
Y = Math.Round(Y, 2);
SetGetAccValues set = new SetGetAccValues();
set.xValue = Y.ToString();

Проблема возникает, когда OnPropertyChanged запускается с "xValue" как propName, свойство PropertyChangedEventHandler всегда остается нулевым, но когда он запускается с "slideValue" как propName, он фактически не является нулевым. Почему она остается пустой в случае xValue?.

  • 0
    Что вы имеете в виду, PropertyChangedEventHandler всегда остается нулевым? Вы подключаете обработчик события к событию PropertyChanged? например: set.PropertyChanged + = SetGetAccValuesPropertyChanged;
  • 0
    Я имею в виду, что PropertyChanged всегда имеет значение null, поэтому я не могу получить доступ к блоку if.
Показать ещё 5 комментариев
Теги:
wpf

2 ответа

1
Лучший ответ

Я считаю, что событие PropertyChanged запускается до завершения загрузки datacontext.

Вы можете прослушивать событие DataContextChanged в вашем usercontrol, так что, когда новый datacontext доступен, вы можете установить свои свойства.

public AccView()
{
    InitializeComponent();

    this.DataContextChanged += OnDataContextChanged;

    this.DataContext = new SetGetAccValues();    
}

private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
    Y = ((double)(sbyte)value) / 64.0;
    Y = Math.Round(Y, 2);

    (dependencyPropertyChangedEventArgs.NewValue as SetGetAccValues).xValue = Y.ToString();
}
  • 0
    Я не могу переместить значение Y в классе SetGetAccValues, так как оно срабатывает и определяется как значение в классе GetAccNotifications
  • 0
    Как SetGetAccValues добавляется в представление GetAccNotifications?
1

Я думаю, вы не привязывали DataContext. Вы должны установить DataContext с кодом в вашем случае.

В SetGetAccValues.xaml.cs

    public SetGetAccValues()
    {       
        DataContext = this;
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню