【问题标题】:Autocompletebox doesn't clear keyboard strokes自动完成框不清除键盘笔划
【发布时间】:2012-09-13 11:07:18
【问题描述】:

在我的一个应用程序中,我使用的是 wpf 工具包中的 WPF 自动完成框。我正在通过 MVVM 模式实现它。绑定工作正常,但我在尝试清除自动完成框的内容时遇到了一个小问题。将视图模型中的绑定属性设置为空,仅部分清除文本(通过键盘输入的所有文本都不会清除 - 即,如果我在获取所有城市时输入 CH 并选择芝加哥并将绑定属性设置为空,则 CH没有被清除,其余的ICAGO是。)

XAML 如下所示:

           <my:AutoCompleteBox Grid.Row="0"
                                Grid.Column="1" 
                                HorizontalAlignment="Left" 
                                Margin="0,6,0,0" 
                                Name="acTown" 
                                SelectedItem="{Binding NewTown, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                ValueMemberBinding="{Binding Converter={StaticResource TownConverter}}"        
                                Populating="Populating"
                                VerticalAlignment="Top" 
                                Height="Auto" 
            </my:AutoCompleteBox>

viewmodel中清框的方法是:

   public void ClearTown()
    {

    NewTown = null;

    OnPropertyChanged("NewTown");
}

我无法弄清楚代码有什么问题,或者这只是自动完成框中的错误?

经过大量研究,我找到了这篇文章:How do you clear the Silverlight AutoCompleteBox SearchText using MVVM,但它没有提供解决方案。 AutoCompleteBox 上似乎有一个 SearchText 属性,它是只读的,不能有 setter

【问题讨论】:

  • 是否也清除 AutoCompleteBox 的 Text 属性?
  • @SoMoS 如何使用 MVVM 模式清除 AutoCompleteBox 的 Text 属性?
  • 将其绑定到 VM 的属性并在需要时清除它。
  • 试过这个,但最终结果是一样的。通过键盘输入的输入不会被清除。如果您阅读了我上面引用的文章,似乎有一个 SearchText 属性对于保存用户输入的 AutoCompleteBox 是只读的(私有)。我不知道如何清除这个。

标签: c# wpf data-binding wpf-controls wpftoolkit


【解决方案1】:

终于明白了。如果有人有兴趣,解决方法是在 ClearTown 函数中将NewTown = null 更改为NewTown = new NewTown()

【讨论】:

  • 这解决了我清除文本框的问题。这是一个黑客,但它的工作原理!注意取决于SelectedItem 为空的代码,因为我在一个相关的按钮命令中,该命令根据SelectedItemproperty 中的内容启用/禁用。可能值得引入类似 Null Object 模式的东西,您可以在其中将 SelectedItem 分配给 Town.NullTown 对象,以便稍后检查。
猜你喜欢
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多