Для пользовательского элемента управления со списком, как я могу представить выбранный элемент на родительскую страницу? - PullRequest
2 голосов
/ 28 октября 2010

У меня есть простой пользовательский элемент управления, который оборачивает некоторую логику вокруг AutoCompleteBox. Этот вопрос может относиться к любому элементу управления ItemsControl, например к раскрывающемуся списку или списку.

<UserControl>
    <Grid Background="White">
        <sdk:AutoCompleteBox Name="myACB" ItemsSource="{Binding myData}" />
    </Grid>
</UserControl>

Я хочу предоставить свойство SelectedItem объекта AutoCompleteBox в родительском элементе, где используется элемент управления. Мой пользовательский элемент управления использует модель представления в качестве контекста данных. В противном случае, я думаю, я мог бы просто связать SelectedItem со свойством зависимости пользовательского элемента управления.

Мне нужно, чтобы родитель мог определить, когда изменяется элемент, выбранный дочерним автозаполнением. Как я могу пойти по этому поводу?

Ответы [ 2 ]

5 голосов
/ 28 октября 2010

Просто создайте свойство зависимостей в UserControl и свяжите его со своим внутренним контролем, как показано ниже:

1) Добавьте свойство зависимости в CustomControl:

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

    // Using a DependencyProperty as the backing store for ItemsSource.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ItemsSourceProperty =
        DependencyProperty.Register("ItemsSource", typeof(System.Collections.IEnumerable), typeof(UserControl1), new UIPropertyMetadata(null));

2) Привязать внутренний контроль со свойством зависимости:

<UserControl ... x:Name="control"     ... >

<ListBox ItemsSource="{Binding ElementName=control, Path=ItemsSource}" />  

Редактировать : Реализация Источника Предметов

2 голосов
/ 28 октября 2010

И если вы попытаетесь таким способом, он может обновить свойство в вашем пользовательском элементе управления:

<ListBox SelectedItem="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Mode=OneWayToSource, Path=ThePropertyInMyUserControl}"/>

Тогда ThePropertyInMyUserControl coulb будет дополнительным свойством зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...