Silverlight にオートコンプリート ボックスがあり、コレクションにバインドされています。正常に動作しています。ユーザーがコレクションにない値を入力できないようにしたいだけです。
例: コレクションには値「Head」が含まれます。ユーザーが Headx またはそれ以外の何かを入力すると、検証が開始されます。
これを行う方法?
よろしく
アルン
Silverlight にオートコンプリート ボックスがあり、コレクションにバインドされています。正常に動作しています。ユーザーがコレクションにない値を入力できないようにしたいだけです。
例: コレクションには値「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();
}
これを実現するには、バインディングを変更できるはずです。
デフォルトでは、テキストプロパティは通常、コントロールがフォーカスを失ったときにバインディングソースを更新します。PropertyChangedのソースを更新するようにBindingを設定することにより、各キーストロークで検証を実装できます。
TextプロパティのBindingは次のようになります
Text="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
プロパティセッターでは、適切と見なされたときにValidationExceptionをスローするか、検証インターフェイスの1つ( INotifyDataErrorInfoまたはIDataErrorInfo)を実装してそのように処理することができます。
私は最近これに取り組みました。私の問題は、オートコンプリート ボックスのフォーカスが失われたイベントで選択された項目のプロパティをチェックすることで解決されます。
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();
}
}
よろしく
プリヤ