如何使用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的text参数。这就是为什么我想在关闭此编辑页(返回主页(时传递此文本。所以问题是,我如何将这个Text参数传递给位于VM中的NoteItems ObservableCollection中的NoteItem元素。

UPD。位于NoteItems中的NoteItem的值不会更改

UPD2.我对NoteItem的值有错误,它已经更改,但新值没有显示在MainPage上,这就是为什么我使用INotifyPropertyChanged,但它不起作用。

这是票据项目类

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
{
...
}

简单地添加CCD_ 2方法与实现CCD_。您必须将接口添加到类定义中,以便绑定机制知道您的类已经实现了

相关内容

  • 没有找到相关文章

最新更新