我在 Silverlight 中有一个自动完成框,它绑定到一个集合。它工作正常。我只是想要它,以便用户不能输入任何不在集合中的值。
例如: Collection 包含一个值“Head”。如果用户输入 Headx 或其他内容,则应触发验证。
这个怎么做?
问候
阿伦
我在 Silverlight 中有一个自动完成框,它绑定到一个集合。它工作正常。我只是想要它,以便用户不能输入任何不在集合中的值。
例如: Collection 包含一个值“Head”。如果用户输入 Headx 或其他内容,则应触发验证。
这个怎么做?
问候
阿伦
试试这个
<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>
您不应在自动完成中同时使用 SelectedText 和 SelectedItem 函数。这是 AutoCompleteBox 的一个错误.....更好的方法是在 GotFocus 和 LossFocus 上设置文本框和 AutoCompleteBox 的可见性。这种方式你会挑衅地解决你的问题
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();
}
我最近在这方面工作。我的问题是通过检查自动完成框的丢失焦点事件上的选定项属性来解决的。
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();
}
}
问候
普里亚
你应该能够改变你的绑定来实现这一点。
默认情况下,文本属性通常会在控件失去焦点时更新绑定源。通过设置 Binding 以更新 PropertyChanged 上的源,您可以实现每次击键的验证。
您对 Text 属性的绑定看起来像这样
Text="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
在您的属性设置器中,您可以在认为合适时抛出ValidationException ,或者您可以实现其中一个验证接口( INotifyDataErrorInfo或IDataErrorInfo)并以这种方式处理它。