Как мне получить производный класс UserControl, связанный с ObservableCollection для ответа на добавления? - PullRequest
1 голос
/ 15 апреля 2011

Моя коллекция выглядит нормально, так как я могу использовать ListView, и она корректно реагирует на добавления, однако, когда я вкладываю просмотр списка в UserControl, это не так.Я предоставил соответствующий код.

Я создал производный класс UserControl следующим образом:

public partial class MyCtrl: UserControl
{
    #region Static Properties

    public static readonly DependencyProperty ItemsSourceProperty =
        ItemsControl.ItemsSourceProperty.AddOwner(
        typeof(MyCtrl),
        new PropertyMetadata(MyCtrl.ItemsSourcePropertyChangedCallback));

    public IEnumerable ItemsSource
    {
        get { return (IEnumerable)GetValue(ItemsSourceProperty); }
        set { SetValue(ItemsSourceProperty, value); }
    }

    public static void ItemsSourcePropertyChangedCallback(
        DependencyObject controlInstance,
        DependencyPropertyChangedEventArgs e)
    {
         MyCtrl myInstance=(MyCtrl)controlInstance;
         myInstance.nestedList.ItemsSource=e.NewValue as IEnumerable;
    }
}

С таким XAML:

<UserControl x:Class="MyCtrl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <ListView Name="nestedList" />
    </Grid>
</UserControl>

Мой потребительский XAML выглядит так:

<MyCtrl x:Name="myInstance" ItemsSource="{Binding Path=MyCollection}" />

Где коллекция определяется следующим образом:

public static readonly DependencyProperty MyCollectionProperty =
       DependencyProperty.Register("MyCollection",
       typeof(ObservableCollection<MyObject>),
       typeof(ConsumingObject),
       new PropertyMetadata(new ObservableCollection<MyObject>());

public ObservableCollection<MyObject> MyCollection
{
    get { return   (ObservableCollection<MyObject>)this.GetValue(MyCollectionProperty); }
    set { this.SetValue(MyCollectionProperty, value); }
}

Ответы [ 2 ]

0 голосов
/ 16 апреля 2011

Этот вопрос может помочь.Что такое DataContext для myInstance?
Может ли код перейти на эту строку?
myInstance.nestedList.ItemsSource = e.NewValue as IEnumerable;
Если yes, то nestedList nullили нет?

0 голосов
/ 15 апреля 2011

возможно, вы хотите зарегистрировать обработчик событий на CollectionChanged, если ваш ItemSource является ObservableCollection

...