我的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();
使用&#34; xValue&#34;触发OnPropertyChanged时会出现问题作为propName,PropertyChangedEventHandler始终为null,但是当使用&#34; slideValue&#34;作为propName,它实际上不是null。为什么在xValue情况下它仍然为空?
答案 0 :(得分:1)
我认为你没有绑定DataContext。在你的情况下,你应该在后面设置DataContext代码。
在SetGetAccValues.xaml.cs
中 public SetGetAccValues()
{
DataContext = this;
}
答案 1 :(得分:1)
我相信PropertyChanged事件是在datacontext加载完成之前触发的。
您可以在usercontrol中侦听DataContextChanged事件,以便在新的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();
}