[英]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.