如何使用 PopAsync 传递数据?

How to pass data using PopAsync?

我遇到以下情况: 我有一个应用程序,我想在其中使用一个特殊页面为其创建笔记。我有带有 ObservableCollection NoteItems 的 VM,其中包含所有注释。当我想创建一个新笔记时,我向这个 ObservableCollection 添加一个新笔记并使用 BindingContext

传递这个新笔记
    var editingPage = new EditingPage();
    editingPage.BindingContext = NoteItems[NoteItems.Count - 1].Text; 
    Application.Current.MainPage.Navigation.PushAsync(editingPage);

在编辑页面我有一个输入字段

       <Entry
         x:Name="EdtingPageEntryField"
         Text="{Binding Text}"
         Placeholder="Enter a note"
       />

,也就是用一个NoteItem的Text参数绑定他的文本。 问题是,如果我更改输入字段中的文本,它不会自动应用于 NoteItem 的文本参数。这就是为什么我想在关闭此 EditingPage(返回 MainPage)时传递此文本的原因。所以问题是,如何将此 Text 参数传递给位于 VM 中的 NoteItems ObservableCollection 中的 NoteItem 元素。

更新。位于NoteItems中的NoteItem的值不变

UPD2。 NoteItem 的值我错了,它已经被改变了,但是新的值没有显示在 MainPage 上,所以我使用了 INotifyPropertyChanged,但是没有起作用。

这是备注项class

public class NoteItem
    {

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        private string text;
        public string Text 
        { 
            get { return text; } 
            set 
            { 
                if(text != value) 
                { 
                    text = value; 
                    NotifyPropertyChanged();
                }
            } 
        }

和MainPage.xaml:

<ContentPage.BindingContext>
        <local:NoteItemViewModel/>
    </ContentPage.BindingContext>

    <FlexLayout>
        
        <ListView ItemsSource="{Binding NoteItems}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Label Text="{Binding Text}"/>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        
    </FlexLayout>
'''

为了动态更新 UI,您的模型必须实现 INotifyPropertyChanged

public class NoteItem : INotifyPropertyChanged
{
  ...
}

简单地添加一个 PropertyChanged 方法与实现 INotifyPropertyChanged 不同。您必须将接口添加到 class 定义中,以便绑定机制知道您的 class 已经实现了它