![](/img/trans.png)
[英]C# CommunityToolkit.Mvvm ObservableProperty on a list
[英]Handling observable object properties with CommunityToolkit.Mvvm
我们如何使用CommunityToolkit.Mvvm
处理本身就是对象的属性?
我知道我可以简单地使用具有简单属性的[ObservableProperty]
属性,例如string
、 int
等数据类型。
我们如何处理POCO
对象且需要可观察的属性?
这是一个例子:
public partial class MyViewModel : ObservableObject
{
[ObservableProperty]
string title;
[ObservableProperty]
decimal price;
Person author; // How do we handle this property that is a Person object?
}
我了解CommunityToolkit.Mvvm
中的源生成器将自动处理Title
和Price
公共属性的创建。 author
呢?
我们是否使用[ObservableProperty]
属性来使复杂的属性可观察,例如上面示例中的author
属性是一个Person
对象?
这里有多个场景:
整个 Person 对象被替换
如果您只替换整个 Person 对象并且不更改其各个属性(您可能会从列表中选择不同的人),那么您只需要使用ObservablePropertyAttribute
装饰author
字段。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public partial class MyViewModel : ObservableObject
{
[ObservableProperty]
string title;
[ObservableProperty]
decimal price;
[ObservableProperty]
Person author;
}
此更改将反映在 UI 中:
Author = anotherPerson;
这个不会:
Author.FirstName = "James";
个人 Person 属性已更改
如果您打算更改 Person 的各个属性,但保持实例相同,则需要使用ObservablePropertyAttribute
装饰Person
对象的各个属性。
public class Person : ObservableObject
{
[ObservableProperty]
string firstName;
[ObservableProperty]
string lastName;
}
public partial class MyViewModel : ObservableObject
{
[ObservableProperty]
string title;
[ObservableProperty]
decimal price;
public Person Author { get; } = new Person();
}
此更改将反映在 UI 中:
Author.FirstName = "James";
这个不会:
Author = anotherPerson;
或两者
或者两者都做,让 UI 反映任何更改,无论是更改单个属性还是整个对象实例。
public class Person : ObservableObject
{
[ObservableProperty]
string firstName;
[ObservableProperty]
string lastName;
}
public partial class MyViewModel : ObservableObject
{
[ObservableProperty]
string title;
[ObservableProperty]
decimal price;
[ObservableProperty]
Person author;
}
这些更改中的任何一个都将反映在 UI 中:
Author = anotherPerson;
Author.FirstName = "James";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.