Windows phone 7 从可观察集合中删除项会导致文本框聚焦
我有一个与列表框在同一屏幕上的文本框。当我从列表框中删除一个项目时,它绑定到一个可观察的集合,文本框获得焦点。有没有办法阻止这种情况发生 我正在使用MVVM,但如果它解决了这个问题,我愿意在代码中添加一些代码 编辑: 代码隐藏视图: 命名空间卸载.WinPhone.Views { 使用System.Windows.Controls; 使用Microsoft.Phone.ControlsWindows phone 7 从可观察集合中删除项会导致文本框聚焦,windows-phone-7,Windows Phone 7,我有一个与列表框在同一屏幕上的文本框。当我从列表框中删除一个项目时,它绑定到一个可观察的集合,文本框获得焦点。有没有办法阻止这种情况发生 我正在使用MVVM,但如果它解决了这个问题,我愿意在代码中添加一些代码 编辑: 代码隐藏视图: 命名空间卸载.WinPhone.Views { 使用System.Windows.Controls; 使用Microsoft.Phone.Controls public partial class MainPageView : PhoneApplicationPag
public partial class MainPageView : PhoneApplicationPage
{
public MainPageView()
{
InitializeComponent();
}
private void QuickNoteBodyEditor_TextChanged(object sender, TextChangedEventArgs e)
{
var senderAsTextbox = (TextBox)sender;
if (senderAsTextbox.Text.Length == 0)
this.Focus();
}
}
}
视图:
视图模型:
public class MainPageViewModel : PropertyChangedBase
{
private ObservableCollection<QuickNote> quickNotes;
private string quickNoteBodyEditor;
private QuickNote selectedQuickNote;
// Databound Properties
public string QuickNoteBodyEditor
{
get { return quickNoteBodyEditor; }
set { quickNoteBodyEditor = value; NotifyOfPropertyChange(() => QuickNoteBodyEditor); NotifyOfPropertyChange(() => CanAddQuickNote);}
}
public QuickNote SelectedQuickNote
{
get { return selectedQuickNote; }
set { selectedQuickNote = value; NotifyOfPropertyChange(() => SelectedQuickNote); NotifyOfPropertyChange(() => CanDeleteSelectedQuickNote); }
}
public ObservableCollection<QuickNote> QuickNotes
{
get { return quickNotes; }
set { quickNotes = value; NotifyOfPropertyChange(() => QuickNotes); }
}
// Guard Clauses
public bool CanAddQuickNote
{
get { return !string.IsNullOrWhiteSpace(quickNoteBodyEditor); }
}
public bool CanDeleteSelectedQuickNote
{
get{ return selectedQuickNote == null ? false : true; }
}
// Constructors
public MainPageViewModel()
{
GetQuickNotesFromIsolatedStorage();
WatchWhatsGotFocus.StartWatching();
}
// Public Methods
public void AddQuickNote()
{
if (CanAddQuickNote)
{
quickNotes.Add(new QuickNote(quickNoteBodyEditor, DateTime.Now));
AddQuickNotesToIsolatedStorage();
quickNoteBodyEditor = string.Empty;
NotifyOfPropertyChange(() => QuickNoteBodyEditor);
NotifyOfPropertyChange(() => QuickNotes);
}
}
public void DeleteSelectedQuickNote()
{
if (CanDeleteSelectedQuickNote)
{
quickNotes.Remove(selectedQuickNote);
AddQuickNotesToIsolatedStorage();
selectedQuickNote = null;
NotifyOfPropertyChange(() => SelectedQuickNote);
NotifyOfPropertyChange(() => QuickNotes);
}
}
private void GetQuickNotesFromIsolatedStorage()
{
quickNotes = IsolatedStorage.Get<ObservableCollection<QuickNote>>("QuickNoteList");
}
private void AddQuickNotesToIsolatedStorage()
{
IsolatedStorage.Add("QuickNoteList", quickNotes);
}
}
public类MainPageViewModel:PropertyChangedBase
{
私人可观察收集快速笔记;
私有字符串quickNoteBodyEditor;
私人QuickNote选择QuickNote;
//数据绑定属性
公共字符串QuickNoteBodyEditor
{
获取{return quickNoteBodyEditor;}
设置{quickNoteBodyEditor=value;NotifyOfPropertyChange(()=>quickNoteBodyEditor);NotifyOfPropertyChange(()=>CanAddQuickNote);}
}
公共QuickNote已选择QuickNote
{
获取{return selectedQuickNote;}
设置{selectedQuickNote=value;NotifyOfPropertyChange(()=>selectedQuickNote);NotifyOfPropertyChange(()=>CanDeleteSelectedQuickNote);}
}
公共可观察收集快速笔记
{
获取{return quickNotes;}
设置{quickNotes=value;NotifyOfPropertyChange(()=>quickNotes);}
}
//保护条款
公共bool-CanAddQuickNote
{
获取{return!string.IsNullOrWhiteSpace(quickNoteBodyEditor);}
}
公共图书馆烛台精选速记
{
获取{return selectedQuickNote==null?false:true;}
}
//建设者
公共MainPageViewModel()
{
GetQuickNotesFromIsolatedStorage();
WatchWhatsGotFocus.StartWatching();
}
//公共方法
public void AddQuickNote()
{
如果(CanAddQuickNote)
{
添加(新的QuickNote(quickNoteBodyEditor,DateTime.Now));
添加QuickNotesToIsolatedStorage();
quickNoteBodyEditor=string.Empty;
NotifyOfPropertyChange(()=>QuickNoteBodyEditor);
NotifyOfPropertyChange(()=>QuickNotes);
}
}
public void DeleteSelectedQuickNote()
{
如果(CanDeleteSelectedQuickNote)
{
quickNotes.Remove(已选择QuickNote);
添加QuickNotesToIsolatedStorage();
selectedQuickNote=null;
NotifyOfPropertyChange(()=>SelectedQuickNote);
NotifyOfPropertyChange(()=>QuickNotes);
}
}
私有void GetQuickNotesFromIsolatedStorage()
{
quickNotes=IsolatedStorage.Get(“QuickNoteList”);
}
私有void AddQuickNotesToIsolatedStorage()
{
添加(“QuickNoteList”,quickNotes);
}
}
我也遇到了同样的问题,一个可能的解决方案是在修改收藏之前将文本框设置为禁用,然后再次启用:
TextBox.IsEnabled = false;
ObservableCollection.Remove(object);
TextBox.IsEnabled = true;
我不认为这是一种干净的方法,但它对我有效:)。你能给我们展示一些代码吗?通常情况下,这不应该发生……我同意Rico的观点。我有很多页面同时使用列表框、文本框和项目删除。从未见过这种情况在没有实际触发的情况下发生。添加了代码,使用调试器,我发现它只在我到达以下行时发生:quickNotes.Remove(selectedQuickNote);我认为您可以根据所选的注释更改文本框的内容。。。你能给我们看一下这个文本框吗?文本也在改变代码吗?@ricoster文本框是用caliburn.micro按名称绑定到QuickNoteBodyEditor的。。。当我从列表框中删除一个项目时,它会聚焦屏幕上的下一个控件,这恰好是文本框。但最终,我将文本框推到一个usercontrol中,它停止了它。
TextBox.IsEnabled = false;
ObservableCollection.Remove(object);
TextBox.IsEnabled = true;