Извините за мой английский.
Я пытаюсь написать UserControl (SearchTextBox ... simmillar Firefox search textbox), который состоит из TextBox, Popup и ListBox во всплывающем окне. Мне нужно изменить ItemsSource ListBox динамически в моем приложении. Поэтому я использую DependencyProperty в UserControl:
//STextBox UserControl Code-Behind
public partial class STextBox : UserControl
{
public static readonly DependencyProperty ItemsSourceProperty;
static STextBox()
{
ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(STextBox),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsArrange, new PropertyChangedCallback(OnItemsSourceChanged)));
}
public IEnumerable ItemsSource
{
get
{
return (IEnumerable)GetValue(STextBox.ItemsSourceProperty);
}
set
{
SetValue(STextBox.ItemsSourceProperty, value);
}
}
private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
STextBox c = (STextBox)d;
c.ItemsSource = (IEnumerable)e.NewValue;
}
Я не могу использовать привязки к ItemsSource в моем приложении, потому что два списка для моего ListBox-ItemsSource создаются на лету из записей базы данных. Я устанавливаю ItemsSource в коде:
// код моего приложения
switch (SomeIF)
{
case 0:
sTextBox.ItemsSource = list1;
break;
case 1:
sTextBox.ItemsSource = list2;
break;
}
Но ничего не случилось. Я точно знаю, что метод OnItemsSourceChanged запущен, но новое значение никогда не присваивается ItemsSource. Что я делаю не так?