依存関係のプロパティについて多くの投稿があったことを知っているので、私は精査し、精査しましたが、うまくいく解決策を持っているものを見たことがありません。ViewModelからAutoCompleteBoxにObservableCollectionをバインドしようとしています。私のViewModelがデータを返し、ゲッターがヒットしています。ただし、その後、コントロールのSetValueまたはOnItemsSourcePropertyChangedは起動しません。何が間違っているのかについて何か考えはありますか?
私はそのようなコントロールを持っています:
[ContentProperty(Name = "ItemsSource")]
public partial class AutoCompleteBox : Control
{
//local stuff
private ListBox lb;
private List<Person> _items;
private ObservableCollection<Person> _view;
public AutoCompleteBox() : base()
{
DefaultStyleKey = typeof(AutoCompleteBox);
Loaded += (sender, e) => ApplyTemplate();
}
protected override void OnApplyTemplate()
{
this.lb = this.GetTemplateChild("Selector") as ListBox;
base.OnApplyTemplate();
}
#region ItemsSource
public IEnumerable ItemsSource
{
get { return GetValue(ItemsSourceProperty) as ObservableCollection<Person>; }
set { SetValue(ItemsSourceProperty, value); } //Never gets called
}
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register(
"ItemsSource",
typeof(IEnumerable),
typeof(AutoCompleteBox),
new PropertyMetadata(null, OnItemsSourcePropertyChanged));
private static void OnItemsSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//Never gets called :(
}
#endregion
public String SearchText
{
get { return GetValue(SearchTextProperty) as String; }
set
{
SetValue(SearchTextProperty, value);
}
}
public static readonly DependencyProperty SearchTextProperty =
DependencyProperty.Register(
"SearchText",
typeof(String),
typeof(AutoCompleteBox),
new PropertyMetadata(null, OnSearchTextPropertyChanged));
private static void OnSearchTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//gets fired when loaded, with data being bound
}
}
以下は、コントロールの使用方法です。
<toolkit:AutoCompleteBox Grid.Row="5" Grid.Column="2" ItemsSource="{Binding Persons,Mode=TwoWay}" SearchText="WhatTheHell"/>
テストとして、また簡単にするために、SearchTextのStringDependencyPropertyを作成しました。SearchTextをバインドすると、正常に機能します。OnSearchTextPropertyChangedは次のように呼び出されます。
<toolkit:AutoCompleteBox Grid.Row="5" Grid.Column="2" ItemsSource="{Binding Persons,Mode=TwoWay}" SearchText="{Binding SearchText}"/>
他の誰かがWinRTでこれらの問題を経験していますか?または、私がしていることに何か問題がありますか?