在C#中,当另一个类中的属性发生更改时,可以通过以下几种方式来引发属性更改:
public class MyClass
{
private string myProperty;
public event EventHandler MyPropertyChanged;
public string MyProperty
{
get { return myProperty; }
set
{
if (myProperty != value)
{
myProperty = value;
OnMyPropertyChanged();
}
}
}
protected virtual void OnMyPropertyChanged()
{
MyPropertyChanged?.Invoke(this, EventArgs.Empty);
}
}
public class AnotherClass
{
private MyClass myObject;
public AnotherClass()
{
myObject = new MyClass();
myObject.MyPropertyChanged += MyObject_MyPropertyChanged;
}
private void MyObject_MyPropertyChanged(object sender, EventArgs e)
{
// 属性发生更改时执行的操作
}
}
public class MyClass : INotifyPropertyChanged
{
private string myProperty;
public event PropertyChangedEventHandler PropertyChanged;
public string MyProperty
{
get { return myProperty; }
set
{
if (myProperty != value)
{
myProperty = value;
OnPropertyChanged(nameof(MyProperty));
}
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class AnotherClass : INotifyPropertyChanged
{
private MyClass myObject;
public event PropertyChangedEventHandler PropertyChanged;
public MyClass MyObject
{
get { return myObject; }
set
{
if (myObject != value)
{
if (myObject != null)
{
myObject.PropertyChanged -= MyObject_PropertyChanged;
}
myObject = value;
if (myObject != null)
{
myObject.PropertyChanged += MyObject_PropertyChanged;
}
OnPropertyChanged(nameof(MyObject));
}
}
}
private void MyObject_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// 属性发生更改时执行的操作
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
这样,当MyProperty
属性发生更改时,AnotherClass
中的MyObject_PropertyChanged
方法会被调用。
public class MyClass
{
private string myProperty;
private Action<string> propertyChangedCallback;
public MyClass(Action<string> callback)
{
propertyChangedCallback = callback;
}
public string MyProperty
{
get { return myProperty; }
set
{
if (myProperty != value)
{
myProperty = value;
propertyChangedCallback?.Invoke(myProperty);
}
}
}
}
public class AnotherClass
{
private MyClass myObject;
public AnotherClass()
{
myObject = new MyClass(MyPropertyChangedCallback);
}
private void MyPropertyChangedCallback(string newValue)
{
// 属性发生更改时执行的操作
}
}
这样,当MyProperty
属性发生更改时,AnotherClass
中的MyPropertyChangedCallback
方法会被调用。
以上是几种常见的方式,可以根据具体的需求选择合适的方式来引发属性更改。
领取专属 10元无门槛券
手把手带您无忧上云