我有两个课程可以为我建造一棵树
public partial class Noeud : ObservableValidator
{
[ObservableProperty]
[Required(ErrorMessage = "Le nom est obligatoire.")]
[StringLength(maximumLength: 25, MinimumLength = 5, ErrorMessage = "Le nom ne doit avoir une longueur comprise entre 5 et 25 caractères.")]
String name;
[ObservableProperty]
[StringLength(maximumLength:255, ErrorMessage = "La description ne doit pas dépasser 255 caractères.")]
String? description;
public Guid IdNoeud { get; }
[ObservableProperty]
Noeud? parent;
public Ressource? Ressource { get; set; }
//resultat obtenu sur 100 soit le résultat d'une ressource soit la somme des résultats des ressources des fils
[Range(0, 100, ErrorMessage = "Le résultat ne doit être compris entre 0 et 100.")]
public int? result { get; set; }
public ObservableCollection<Noeud> Noeuds { get; } = new ObservableCollection<Noeud>();
public Noeud(Guid guidnoeud, String name, string description, Noeud? parent = null, Ressource? ressource=null)
{
Name = name;
Description = description;
Parent = parent;
IdNoeud = guidnoeud;
if (ressource != null)
{
Ressource = ressource;
}
}
}
和
public partial class Ressource : ObservableValidator
{
public int? type { get; set; }
[Url(ErrorMessage ="L'entrée doit être une URL valide.")]
public String? ressource { get; set; }
//description du coaching
[StringLength(255, ErrorMessage = "La description de la méthode d'acquisition de la compétence ne doit pas dépasser 255 caractères.")]
public String? coaching { get; set; }
//description de la compétence recherchée
[StringLength(50, ErrorMessage = "La description de la compétence ne doit pas dépasser 50 caractères.")]
public String? competence { get; set; }
//Code de la compétences suivant un référentiel propre
[StringLength(15, ErrorMessage = "Le code de la référence à la compétence ne doit pas dépaser 15 caractères")]
public String? codeRefCompetence { get; set; }
//code de l'objectif dans eda
[StringLength(15, ErrorMessage = "Le code de l'objectif LMS ne doit pas dépasser 20 caractères.")]
public String? codeObjectif { get; set; }
[Range(0,100, ErrorMessage ="Le score doit être compris entre 0 et 100.")]
public int? Score { get; set; }
}
我有一个用 MVVM 开发的页面,它基于此视图模型显示数据
public partial class TreeViewPageViewModel : ObservableObject
{
public ObservableCollection<Noeud> Noeuds { get; } = new ObservableCollection<Noeud>();
....
[RelayCommand]
public async Task AddItem()
{
..
if (action == "- Une Action")
{
Noeud NewNoeud = new Noeud(Guid.NewGuid(), "", "", SelectedItem, null);
selectedItem.Noeuds.Add(NewNoeud);
await Page.Navigation.PushAsync(new EditTreeAction(ref NewNoeud));
}
else
{
Noeud NewNoeud = new Noeud(Guid.NewGuid(), "", "", SelectedItem, new Ressource());
await Page.Navigation.PushAsync(new EditTreeRessource(ref NewNoeud));
selectedItem.Noeuds.Add(NewNoeud);
}
...
当我更新名称和节点描述时,我的 .xaml 会更新为正确的值。
<Label Text="{Binding Description}" LineBreakMode="WordWrap" Margin="0"/>
<Label Text="{Binding Parent.Name}" LineBreakMode="WordWrap" Margin="0" TextColor="red"/>
当我更新资源数据时,它会添加到节点,但不会显示在 .xaml 中
<Label Text="Description de compétence à obtenir :" LineBreakMode="WordWrap" Margin="0,6,0,0" FontAttributes="Bold" FontSize="Caption"/>
<Label Text="{Binding Ressource.competence}" LineBreakMode="WordWrap" Margin="0"/>
另一方面,如果在调试模式下我注释掉这些行并取消注释它们,那么就会出现值。
我尝试了很多事情: 将资源作为可观察的 => 即使在调试中也不再显示 将资源类的属性设置为可观察 => 这不起作用
你知道该怎么做吗?
提前致谢
Ressource 和 Ressource.competence 应该都是可观察的。
所以修改Noeud类中的代码:
public Ressource? Ressource { get; set; }
到
[ObservableProperty]
Ressource? ressource;
并更改Ressource类中的代码:
[StringLength(50, ErrorMessage = "La description de la compétence ne doit pas dépasser 50 caractères.")]
public String? competence { get; set; }
到
[ObservableProperty]
[StringLength(50, ErrorMessage = "La description de la compétence ne doit pas dépasser 50 caractères.")]
String? competence;
在 xaml 中:
<Label Text="{Binding Ressource.Competence}" LineBreakMode="WordWrap" Margin="0"/>