我的 INotifypropertyChanged 在我的 Xamarin 中不起作用 Android
my INotifypropertyChanged doesnt work in my Xamarin Android
我需要在我的 SeekBar 进度 属性 发生变化时通知我!
我创建了我的 SeekBar 并覆盖了进度 属性!
但它不起作用!
public class MySeekBar : SeekBar,INotifyPropertyChanged
{
public MySeekBar(Context context) : base(context)
{
}
public override int Progress
{
get => base.Progress;
set { base.Progress = value; OnPropertyChange(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChange([CallerMemberName] string propName = null)
{
var change = PropertyChanged;
if (change != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
您的项目中有些东西不符合要求。如果您正在使用布局,那么您可能忘记将 SeekBar class 更改为 MySeekBar?另外,您还缺少一些布局所需的构造函数。至于实现,我可能不会覆盖 属性,因为下面的代码对我来说很好用。
public class MySeekBar : SeekBar, INotifyPropertyChanged
{
public MySeekBar(Context context) : base(context)
{
Initialize();
}
public MySeekBar(Context context, IAttributeSet attrs) : base (context,attrs)
{
Initialize();
}
public MySeekBar(Context context, IAttributeSet attrs, int defStyle) : base (context, attrs, defStyle)
{
Initialize();
}
private void Initialize()
{
this.ProgressChanged += (sender, e) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Progress"));
}
public event PropertyChangedEventHandler PropertyChanged;
}
已添加到布局中(基本命名空间为 SeekB,因此控件应为 seekb.MySeekBar)。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<seekb.MySeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar1" />
</LinearLayout>
我需要在我的 SeekBar 进度 属性 发生变化时通知我! 我创建了我的 SeekBar 并覆盖了进度 属性! 但它不起作用!
public class MySeekBar : SeekBar,INotifyPropertyChanged
{
public MySeekBar(Context context) : base(context)
{
}
public override int Progress
{
get => base.Progress;
set { base.Progress = value; OnPropertyChange(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChange([CallerMemberName] string propName = null)
{
var change = PropertyChanged;
if (change != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
您的项目中有些东西不符合要求。如果您正在使用布局,那么您可能忘记将 SeekBar class 更改为 MySeekBar?另外,您还缺少一些布局所需的构造函数。至于实现,我可能不会覆盖 属性,因为下面的代码对我来说很好用。
public class MySeekBar : SeekBar, INotifyPropertyChanged
{
public MySeekBar(Context context) : base(context)
{
Initialize();
}
public MySeekBar(Context context, IAttributeSet attrs) : base (context,attrs)
{
Initialize();
}
public MySeekBar(Context context, IAttributeSet attrs, int defStyle) : base (context, attrs, defStyle)
{
Initialize();
}
private void Initialize()
{
this.ProgressChanged += (sender, e) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Progress"));
}
public event PropertyChangedEventHandler PropertyChanged;
}
已添加到布局中(基本命名空间为 SeekB,因此控件应为 seekb.MySeekBar)。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<seekb.MySeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar1" />
</LinearLayout>