首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutocompleteBox验证

AutocompleteBox验证
EN

Stack Overflow用户
提问于 2013-02-09 17:25:04
回答 3查看 1.2K关注 0票数 0

我在silverlight中有一个自动完成框,它绑定到一个集合。它工作得很好。我只想要它,这样用户就不能输入任何不在集合中的值。

例如:集合包含一个值"Head“。如果用户输入Headx或其他值,则应触发验证。

该怎么做呢?

问候

Arun

EN

回答 3

Stack Overflow用户

发布于 2013-02-09 20:00:30

试试这个

代码语言:javascript
复制
<Sdk:AutoCompleteBox Grid.Column="3" Grid.Row="3" Height="18" Width="150" 
     IsTextCompletionEnabled="True" TabIndex="9" HorizontalAlignment="Left"

     Text="{Binding ElementName=ResEdit,Path=DataContext.SelectedDemoText,Mode=TwoWay}"
     ItemsSource="{Binding ElementName=ResEdit,Path=DataContext.DemoList,Mode=OneWay}"
     ItemTemplate="{StaticResource DemoTemplate}"
     ValueMemberPath="DemoCode" 
     LostFocus="AutoCompleteBox_LostFocus"
     Margin="0,0,21,0" Padding="0">
  </Sdk:AutoCompleteBox>

在autocomplete中不应同时使用函数SelectedText和SelectedItem。这是AutoCompleteBox的一个错误.更好的方法是在GotFocus和LossFocus上设置textbox和AutoCompleteBox的可见性。这样你就可以大胆地解决你的问题了。

代码语言:javascript
复制
 private void DemoAutoComplete_LostFocus(object sender, RoutedEventArgs e)
            {
                DemoTextBox.Visibility = Visibility.Visible;
                DemoAutoComplete.Visibility = Visibility.Collapsed;
                DemoTextBox.Text = OCRAutoComplete.Text;

                ((DemoVM)this.DataContext).SelectedDemoText = DemoAutoComplete.Text;
            }



private void DemoTextBox_GotFocus(object sender, RoutedEventArgs e)
    {
        DemoAutoComplete.Text = OctTextBox.Text;
        DemoTextBox.Visibility = Visibility.Collapsed;
        DemoAutoComplete.Visibility = Visibility.Visible;
        DemoAutoComplete.Focus();
    }
票数 1
EN

Stack Overflow用户

发布于 2013-02-09 22:14:00

你应该能够改变你的绑定来实现这一点。

默认情况下,文本属性通常会在控件失去焦点时更新绑定源。通过设置绑定以更新PropertyChanged上的源代码,您可以在每次击键时实现验证。

Text属性上的绑定将如下所示

代码语言:javascript
复制
Text="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

然后,在您的属性设置器中,您可以在认为合适的时候抛出一个ValidationException,或者您可以实现一个验证接口(INotifyDataErrorInfoIDataErrorInfo)并以这种方式处理它。

This article is a good source of info about the complexities of data Binding

票数 0
EN

Stack Overflow用户

发布于 2013-02-26 13:41:34

我最近一直在做这件事。我的问题可以通过检查自动完成框的lost focus事件上的selected item属性来解决。

代码语言:javascript
复制
private void autoCompleteBox1_LostFocus(object sender, RoutedEventArgs e)     
{     
     if (autoCompleteBox1.SelectedItem == null && !string.IsNullOrEmpty(autoCompleteBox1.Text))
      {
       MessageBox.Show("Please fill in the right value");
       autoCompleteBox1.Text = "";
       autoCompleteBox1.Focus();
        }
}

问候

Priya

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14786668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档