Windows phone 7 从可观察集合中删除项会导致文本框聚焦

Windows phone 7 从可观察集合中删除项会导致文本框聚焦,windows-phone-7,Windows Phone 7,我有一个与列表框在同一屏幕上的文本框。当我从列表框中删除一个项目时,它绑定到一个可观察的集合,文本框获得焦点。有没有办法阻止这种情况发生 我正在使用MVVM,但如果它解决了这个问题,我愿意在代码中添加一些代码 编辑: 代码隐藏视图: 命名空间卸载.WinPhone.Views { 使用System.Windows.Controls; 使用Microsoft.Phone.Controls public partial class MainPageView : PhoneApplicationPag

我有一个与列表框在同一屏幕上的文本框。当我从列表框中删除一个项目时,它绑定到一个可观察的集合,文本框获得焦点。有没有办法阻止这种情况发生

我正在使用MVVM,但如果它解决了这个问题,我愿意在代码中添加一些代码

编辑:

代码隐藏视图:

命名空间卸载.WinPhone.Views { 使用System.Windows.Controls; 使用Microsoft.Phone.Controls

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;