У меня есть следующий ярлык и ползунок в моем 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?.
Я считаю, что событие 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();
}
Я думаю, вы не привязывали DataContext. Вы должны установить DataContext с кодом в вашем случае.
В SetGetAccValues.xaml.cs
public SetGetAccValues()
{
DataContext = this;
}