gpt4 book ai didi

c# - 使用 CommunityToolkit.Mvvm 处理可观察对象属性

转载 作者:行者123 更新时间:2023-12-05 02:28:46 25 4
gpt4 key购买 nike

我们如何使用 CommunityToolkit.Mvvm 处理对象本身的属性?

我知道我可以简单地使用具有简单属性的 [ObservableProperty] 属性,例如stringint等数据类型

我们如何处理属于 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 中的源代码生成器将自动处理 TitlePrice 公共(public)属性的创建。 author 呢?

我们是否使用 [ObservableProperty] 属性来使复杂的属性可观察,例如上面示例中的 author 属性是一个 Person对象?

最佳答案

这里有多个场景:

整个 Person 对象被替换

如果您只替换整个 Person 对象而不更改其个别属性(您可能会从列表中选择不同的人),您只需用 author 字段装饰 ObservablePropertyAttribute

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;
}

此更改将反射(reflect)在 UI 中:

Author = anotherPerson;

而这个不会:

Author.FirstName = "James";

个人属性得到改变

如果您打算更改个人的个人属性,但保持实例不变,则需要使用 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();
}

此更改将反射(reflect)在 UI 中:

Author.FirstName = "James";

而这个不会:

Author = anotherPerson;

或两者兼而有之

或者两者兼而有之,让 UI 反射(reflect)任何更改,无论是更改单个属性还是整个对象实例。

public class Person : ObservableObject
{
[ObservableProperty]
string firstName;

[ObservableProperty]
string lastName;
}

public partial class MyViewModel : ObservableObject
{
[ObservableProperty]
string title;

[ObservableProperty]
decimal price;

[ObservableProperty]
Person author;
}

任何这些更改都将反射(reflect)在 UI 中:

Author = anotherPerson;
Author.FirstName = "James";

关于c# - 使用 CommunityToolkit.Mvvm 处理可观察对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72552051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com