WP8中绑定项的问题

时间:2014-04-21 06:10:21

标签: c# xaml windows-phone-8 binding

我开发了一个笔记应用程序,使用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));
}
问题是:即使我单击取消按钮,该注释仍然保存修改文本???

1 个答案:

答案 0 :(得分:0)

那是因为ItemModifyNote引用了来自NoteViewModel的{​​{1}}个实例。由于编辑页面中的ItemsNote和主页面中的TextBox都在同一个veiwmodel实例上运行,因此当用户修改LongListSelector属性时,ItemModifyNote将显示更新的值,而无需更多代码需要的。

要避免此行为,请在按钮编辑单击事件处理程序方法中,尝试创建LongListSelector的新实例,并从NoteViewModel中的属性值复制它的属性值,而不是直接引用现有实例