Мне нравится делиться списком между приложением и пользовательским Usercontrol. Я использую IEnumerable как вложенное свойство, чтобы предоставить список Listbox внутри пользовательского UserControl. Затем ListBox получает прикрепленное свойство как ItemsSource. Это работает до сих пор. Но когда список хостов изменяется, список внутри usercontrol должен обновляться. Как я могу это достичь? Текущий код устанавливает список Usercontrol, но когда хост изменяет список, вложенное свойство не будет обновляться.wpf прикрепленное свойство с коллекцией не обновляется
Хост, который использует UserControl имеет ComboBox, который должен поделиться своим ItemsSource с ListBox в UserControl в
public ObservableCollection<Person> PersonList
{
get;
set;
}
Xaml хозяина связывает ComboBox к коллекции:
<ComboBox x:Name="combobox1" Width="200" ItemsSource="{Binding PersonList}" DisplayMemberPath="Name" SelectedIndex="0" IsEditable="True"></ComboBox>
UserControl, который размещается внутри хоста, получает сбор через прикрепленное свойство. Связывание выглядит тяжелым, но, кажется, хорошо:
<myUserCtrl:AdvEditBox
...
prop:DynamicListProvider.DynamicList="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}},
Path=DataContext.PersonList}">
...
</myUserCtrl:AdvEditBox
вложенное свойство имеет функцию обратного вызова, которая в настоящее время получает вызывается только один раз:
class DynamicListProvider : DependencyObject
{
public static readonly DependencyProperty DynamicListProperty = DependencyProperty.RegisterAttached(
"DynamicList",
typeof(IEnumerable),
typeof(DynamicListProvider),
new FrameworkPropertyMetadata(null, OnDynamicListPropertyChanged)));
public static IEnumerable GetDynamicList(UIElement target) {..}
public static void SetDynamicList(UIElement target, IEnumerable value) {..}
private static void OnDynamicListPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue != null && o is FrameworkElement)
{
...
}
}
OnDynamicListPropertyChanged() должна вызываться всякий раз, когда PersonList изменений хозяевах , Должен ли я вводить INotifyCollectionChanged внутри прикрепленного свойства? Если да, то где и как?
У меня точно такой же вопрос сейчас. –
Я выложу свое решение. Дайте мне знать, если это поможет. – deafjeff