AutoCompleteBox.Text属性表现得很奇怪

时间:2014-04-18 13:22:43

标签: c# .net binding autocompletebox

我遇到了一个奇怪的问题。 我的视图中有一个AutoCompleteBox

<sdk:AutoCompleteBox x:Name="txtSIA" 
 Grid.ColumnSpan="1" Grid.Row="1" Grid.Column="1"
 SelectedItem="{Binding SIA, Mode=TwoWay, ValidatesOnNotifyDataErrors=True}" 
 Text="{Binding TextSIA, Mode=TwoWay}"
 KeyUp="TxtSIA_KeyUp"
 Populating="SIANonSIU_Populating" 
 Style="{StaticResource AutoCompleteStyle}"  
/>

我实现了一个字段验证器,用于检查其文本是否为空或空字符串。 它工作得很好,但棘手的部分是我有一个按钮,重置我的所有控件值,我的viewmodel代码是:

void BtnReset_OnClick(RoutedEventArgs e)
{
    SIA = new SIA();
    TextSIA = string.Empty;
    BtnGeneralIsEnabled = false;
    DataGridSource = null;
}

每当我单击它然后在我的AutoCompleteBox中写入时,AutoCompleteBox永远不会为空或者即使在我的密码事件监听器后面的代码中也是空的。

以下是一些图片来说明我的观点:

Text = ab

Text = a

Text supposed to be = ""

2 个答案:

答案 0 :(得分:0)

注册到AutoCompleteBox的TextChanged事件而不是KeyUp:

“当AutoCompleteBox的文本框部分中的文本发生更改时发生。”

答案 1 :(得分:0)

我找到了答案here

要解决此问题,但我们必须创建一个新的自动完成框并覆盖OnApplyTemplate方法。

public class CustomAutoComplete : AutoCompleteBox
{
TextBox mytext;

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();
    mytext = GetTemplateChild("Text") as TextBox;
    mytext.TextChanged += new System.Windows.Controls.TextChangedEventHandler(mytext_TextChanged);
}

void mytext_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
    this.Text = mytext.Text;
    OnTextChanged(new RoutedEventArgs());
}

}