【问题标题】:WPF databound TextBox cursor position resetting. Possible bug?WPF 数据绑定文本框光标位置重置。可能的错误?
【发布时间】:2013-06-20 11:20:52
【问题描述】:

所以我遇到了这个奇怪的问题。我有一个绑定到 ViewModel 的 TextBox :

<TextBox DockPanel.Dock="Right" Text="{Binding Path=FilterText, UpdateSourceTrigger=PropertyChanged}"/>

使用FilterText 的内容,我正在过滤ListBox(绑定到ObservableCollection)。

现在一切正常。但是每次击键后,这个TextBox的光标位置一直重置到开头。这只发生在这个特定的TextBox 上。我有其他绑定TextBox 工作得很好。

我用谷歌搜索,发现这发生在.NET4.0。但主要是在涉及字符串格式化或字符串到双重转换时。但是 FilterText 是简单的String 属性,并且任何地方都没有涉及double 变量。

代码如下:

private String _filterText;
public String FilterText
{
    get { return _filterText; }
    set
    {
        if (_filterText != value)
        {
            _filterText = value;
            RaisePropertyChanged("FilterText");
            FilterList(); //this method works fine
        }
    }
}

有人能解释一下为什么会这样吗? 在其他地方建议的解决方案包括将UpdateSourceTrigger 更改为LostFocus 或使用附加行为手动设置光标位置。还有其他更简单的解决方案吗?或者这只是一个错误?

【问题讨论】:

  • 我猜如果您在FilterText 属性设置器中注释了对FilterList() 的调用,问题不会发生?
  • 向我们展示 FilterList 代码,那里是导致问题的原因
  • @blindmeis,这里是代码。我还提供了方法中使用的 ObservableCollectionEx 的代码。 pastebin.com/1Q69LDRe
  • @AritraBhowmick 我可以重现像one you mentioned 这样的问题,但是你的对我来说效果很好。作为一个疯狂的猜测,在返回_questions 之前,尝试在FilterText setter 和Questions 的属性getter 中用RaisePropertyChanged("Questions") 替换对FilterList() 的调用,然后添加FilterList() 方法调用。逻辑应该与此相同,并且可以解决一些线程更新问题。
  • @Viv,按照你的建议做了。没有运气。插入符号位置未正确更新。我什至按照here 的建议添加了一个行为。但还是一样。

标签: wpf data-binding textbox cursor-position


【解决方案1】:

获得了您的源代码并可以重现该问题。然而,它不是那些 .NET 4 问题之一,因为它在 .NET 4.5 中也有同样的问题。实际上,这在 .NET 中根本不是问题。

ManageQuestionViewModel.cs

切换

public void Initialize() {
...
  this.ViewCore.FocusQuestionData();
}

public void Initialize() {
...
  // this.ViewCore.FocusQuestionData();
}

你已经完成了:)

哦,您不再需要您添加的 ResetCaretBehavior 来尝试解决此问题

【讨论】:

  • 嗯。从来没想过!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多