今天是个好日子!
出现了以下问题:
有一个类。例如 Book Book,其中定义了一组属性。
public class Book {
string Name {get; set;}
string Author {get; set;}
double price {get; set;}
// Далее определено Событие на изменение свойств книги OnBookPropertiesChanged
}
假设某个类的另一个对象订阅了Book类对象的OnBookPropertiesChanged事件。如何将 Book 类对象的某些属性的更改值传递给该对象?
同时,我想知道:有没有办法避免创建单独的事件来更改 Book 类对象的每个单独属性?事实上,Book 可以有很多属性。(据了解,它们在程序中以单独的形式输入,用于后续存储在类对象中)。
有一个选项可以做到这一点:
public interface IBook {
string Name { get; }
string Author { get; }
double Price { get; }
}
public class Book : IBook {
public string Name { get; private set; }
public string Author { get; private set; }
public double Price { get; private set; }
public Book(string name, string author, double price) {
Name = name;
Author = author;
Price = price;
}
public void UpdateBookProperties(IBook newBookProperties) {
this.Name = newBookProperties.Name;
this.Author = newBookProperties.Author;
this.Price = newBookProperties.Price;
OnBookPropertiesChanged();
}
public event Action<IBook> BookPropertiesChanged;
private void OnBookPropertiesChanged() {
if(BookPropertiesChanged != null) {
IBook newBookProperties =
BookFactory.CreateBook(this.Name, this.Author, this.Price);
BookPropertiesChanged(newBookProperties);
}
}
}
public class BookFactory {
public static IBook CreateBook(string name, string author, double price) {
return new Book(name, author, price);
}
}
但我不喜欢这个选项。有几个原因:
1) 要更改 Book 类当前对象的任何属性,您必须创建一个新对象,在该对象中将指定新属性。
2) 因此,不可能对一本书的单个属性进行简单的更改。否则,订阅 BookPropertiesChanged 事件的对象根本看不到图书属性的更改。
您能告诉我在没有冗余代码的情况下实现这种情况的最佳方法吗?
您可以从属性设置器发送消息
类型
命名空间 mvvm
{
谢谢大家的代码和提示。
结果,我确定了以下实现: