У меня есть numpy 2-мерный массив numpy, который содержит ежедневные цены акций для нескольких акций. Например,
daily_prices = np.array([
[4,3,3,1],
[5,4,3,6],
[6,3,2,7],
[3,9,7,4],
[8,4,6,3],
[8,3,3,9]])
, где каждая строка - это другая дата, а каждый столбец - это разные акции.
Я хотел бы иметь возможность хранить в массиве (или что-то более подходящее), Каждый раз, когда это свойство обновляется, мне нужно запускать другое событие. Для этого я добавил ...
У меня есть пользовательский элемент управления, который предоставляет DependencyProperty под названием VisibileItems Каждый раз, когда это свойство обновляется, мне нужно запускать другое событие. Для этого я добавил FrameworkPropertyMetadata с событием PropertyChangedCallback.
По какой-то причине это событие вызывается только один раз и не запускается при следующем изменении VisibleItems.
XAML:
<cc:MyFilterList VisibleItems="{Binding CurrentTables}" />
CurrentTables - это DependencyProperty на MyViewModel. CurrentTables часто меняется. Я могу привязать другой элемент управления WPF к CurrentTables, и я вижу изменения в пользовательском интерфейсе.
Вот как я связал VisibleItems с PropertyChangedCallback
public static readonly DependencyProperty VisibleItemsProperty =
DependencyProperty.Register(
"VisibleItems",
typeof(IList),
typeof(MyFilterList),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(VisiblePropertyChanged))
);
public IList VisibleItems {
get { return (IList)GetValue(VisibleItemsProperty); }
set { SetValue(VisibleItemsProperty, value); }
}
, войдя в VisiblePropertyChanged, я вижу, что он срабатывает при первой установке CurrentTables. но не в последующие разы.
UPDATE
, поскольку некоторые из вас задались вопросом о том, как модифицируется CurrentTables, он полностью переназначается при изменении:
OnDBChange()...
CurrentTables = new List<string>(MainDatabaseDataAdapter.GetTables(this.SelectedServer, this.SelectedDatabase));
эта строка вызывается при каждом изменении, но мой обработчик VisiblePropertyChanged вызывается только в первый раз.
UPDATE
, если я назначаю VisibleItems напрямую, обработчик вызывается каждый раз!
TestFilterList.VisibleItems = new List<string>( Enumerable.Range(1, DateTime.Now.Second).ToList().Select(s => s.ToString()).ToList() );
Итак, похоже, что проблема связана с DependencyProperty (VisibleItems), наблюдающим за другим DependencyProperty (CurrentTables). Каким образом привязка работает при первом изменении свойства, а не при последующих? Попытка изучить эту проблему с помощью Snoop, как предлагали некоторые из вас.