<ig:XamComboEditor
x:Name="comboEditor"
Height="30"
Width="300"
ItemsSource="{Binding Source={StaticResource DataUtil}, Path=Products}"
DisplayMemberPath="ProductName"
IsEditable="True"
CustomValueEnteredAction="Add" />
xamComboEditor コントロールの CustomValueEnteredAction プロパティによって、エンド ユーザーがコントロールのテキスト ボックスに入力する時にコントロールがどのように動作するのかを指定できます。このプロパティは xamComboEditor が編集モードの時に動作します。
CustomValueEnteredActions 列挙体は以下の 3 つの動作を可能にします。
Ignore: デフォルト。入力している文字がフィルター基準を満たさない場合 (フィルター基準を指定していない場合は StartsWith 基準)、コントロールは入力の継続を許可しません。無効の値はテキスト ボックスから自動的に削除されます。
Allow: このオプションによって、データの入力はできますが、入力されたテキストは項目コレクションに含まれません。
Add: 入力した値が基本項目コレクションにない場合、この新しい値はこれに追加されます。DataObjectRequested、 ItemAdding および ItemAdded イベントが起動されます。
注:
以下の例は、このプロパティを構成できる方法を示します。
XAML の場合:
<ig:XamComboEditor
x:Name="comboEditor"
Height="30"
Width="300"
ItemsSource="{Binding Source={StaticResource DataUtil}, Path=Products}"
DisplayMemberPath="ProductName"
IsEditable="True"
CustomValueEnteredAction="Add" />
Visual Basic の場合:
Private Sub UserControl_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
...
Dim comboEditor As New XamComboEditor()
...
comboEditor.IsEditable = True
comboEditor.CustomValueEnteredAction = CustomValueEnteredActions.Add
...
End Sub
C# の場合:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
...
XamComboEditor comboEditor = new XamComboEditor();
...
comboEditor.IsEditable = true;
comboEditor.CustomValueEnteredAction = CustomValueEnteredActions.Add;
...
}
イベント
xamComboEditor が項目コレクションに追加しようとする項目のための新しいデータ オブジェクトを作成する必要がある時に、 DataObjectRequested イベントが発生します。
項目をコントロールの基本 ItemsSource に追加しようとする時に、 ItemAdding イベントが発生します。このイベントはキャンセルできます。このイベントの間、入力された値を検証し、その後で追加またはキャンセルできます。
項目が xamComboEditor コントロールの ItemsSource に追加された時に、 ItemAdded イベントが発生します。
以下の例は、ItemAdding イベントの間に入力した値を検証およびキャンセルできる方法を示します。
Visual Basic の場合:
Private Sub UserControl_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
' ItemAdding イベントのイベント ハンドラーを追加します。
AddHandler comboEditor.ItemAdding, AddressOf _ItemAdding
End Sub
Private Sub _ItemAdding(ByVal sender As Object, ByVal e As ComboItemAddingEventArgs)
' ビジネス オブジェクトを取得します。
Dim product As Product = DirectCast(e.Item.Data, Product)
Dim name As String = product.ProductName
' 入力した製品名のサイズを検証します。
' 名前が 5 文字よりも少ない場合、イベントはキャンセルされます。
If name.Length < 5 Then
e.Cancel = True
End If
End Sub
C# の場合:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
// ItemAdding イベントのイベント ハンドラーを追加します。
comboEditor.ItemAdding += new EventHandler<ComboItemAddingEventArgs>(_ItemAdding);
}
private void _ItemAdding(object sender, ComboItemAddingEventArgs e)
{
// ビジネス オブジェクトを取得します。
Product product = (Product)e.Item.Data;
string name = product.ProductName;
// 入力した製品名のサイズを検証します。
// 名前が 5 文字よりも少ない場合、イベントはキャンセルされます。
if (name.Length < 5)
{
e.Cancel=true;
}
}