我开发了一个笔记应用程序,使用ItemsNote来保存笔记列表,并使用ItemModifyNote来修改时保存临时项目。
public ObservableCollection<NoteViewModel> ItemsNote
{
get
{
return _itemsNote;
}
set
{
_itemsNote = value;
NotifyPropertyChanged("ItemsNote");
}
}
public NoteViewModel ItemModifyNote { get; set; }
在Mainpage.xaml(我在LongListSelector中显示ItemsNote绑定),我插入&#34;编辑&#34;每个音符旁边的按钮,所以当我点击它时,我将ItemModifyNote的数据设置为ItemsNote中的选定项目,然后导航到&#34; modifyNotePage.xaml&#34;
private void btEditNote_Click(object sender, RoutedEventArgs e)
{
var button = (sender as Button).DataContext as NoteViewModel;
if (button != null)
{
int intIndex = App.ViewModel.ItemsNote.IndexOf(button);
string modifyUri = "/Pages/NoteModifyPage.xaml?Id=" + intIndex.ToString();
App.ViewModel.ItemModifyNote = App.ViewModel.ItemsNote.ElementAt(intIndex);
NavigationService.Navigate(new Uri(modifyUri, UriKind.RelativeOrAbsolute));
}
}
在ModifyNotePage.xaml,我通过2个文本框修改ItemModifyNote的数据(包括标题和内容,两者都是字符串)
<TextBox Grid.Column="1"
Text="{Binding ItemModifyNote.NoteTitle, Mode=TwoWay}" x:Name="tbxModifyNoteTitle"
FontFamily="Clear Sans Light" BorderThickness="0.0"
KeyDown="tbxModifyNoteTitle_KeyDown"/>
</Grid>
<TextBox Grid.Row="1" Margin="0,0,0,20"
x:Name="tbxModifyNoteContent" Text="{Binding ItemModifyNote.NoteContent, Mode=TwoWay}"
AcceptsReturn="True" TextWrapping="Wrap" BorderThickness="0.0" FontFamily="Clear Sans Light"
GotFocus="tbxModifyNoteContent_GotFocus" LostFocus="tbxModifyNoteContent_LostFocus"/>
最后我使用了2个按钮:取消和保存 在保存按钮中,我通过ItemModifyNote
的数据设置ItemsNote中项目的数据private void btCancel_Click(object sender, EventArgs e)
{
NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute));
}
private void btSave_Click(object sender, EventArgs e)
{
App.ViewModel.ItemsNote[key] = App.ViewModel.ItemModifyNote;
NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute));
}
问题是:即使我单击取消按钮,该注释仍然保存修改文本???
答案 0 :(得分:0)
那是因为ItemModifyNote
引用了来自NoteViewModel
的{{1}}个实例。由于编辑页面中的ItemsNote
和主页面中的TextBox
都在同一个veiwmodel实例上运行,因此当用户修改LongListSelector
属性时,ItemModifyNote
将显示更新的值,而无需更多代码需要的。
要避免此行为,请在按钮编辑单击事件处理程序方法中,尝试创建LongListSelector
的新实例,并从NoteViewModel
中的属性值复制它的属性值,而不是直接引用现有实例