Свойство зависимости для заполнения списка или массива - PullRequest
3 голосов
/ 27 июля 2011

У меня есть пользовательский элемент управления.Это имеет возможность сделать что-то с несколькими другими элементами управления.Я бы хотел, чтобы в нем был элемент NotifyControl, где я мог бы связать некоторые другие элементы управления, такие как NotifyControl="{Binding ElementName=controlA}".Это хорошо, но я хотел бы записать n элементы управления.Так что может быть список в значении элемента или отметка элемента несколько раз.Как

<MyControl NotifyControl="{Binding ElementName=a}" NotifiyControl="{Binding ElementName=b}" />

или

<MyControl NotifyControl="{Binding ElementName=a}, {Binding ElementName=b}" />

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


РЕДАКТИРОВАТЬ :

У меня сейчас

<MyControl>
    <MyControl.NotifyControls>
        <NotifyControlWrapper View="{Binding ElementName=details}" Test="entry one" />
        <NotifyControlWrapper View="{Binding ElementName=gauge}" Test="e2" />
    </MyControl.NotifyControls>
</MyControl>
<OtherControl x:Name="details" />

NotifyControls - это свойство DependencyProperty, заполненное двумя записями, поэтому эта часть работает нормально.Источник NotifyControlWrapper - это просто класс, полученный из DependencyObject с двумя свойствами зависимостей View (тип INotifyControl) и Test (тип String).

Как я уже сказал, мойсписок получает две записи с двумя NotifyControlWrapper.Но пока Test содержит данную строку, View равно null.Почему это или как отлаживать?

Ответы [ 2 ]

2 голосов
/ 27 июля 2011

Ни один в вашем вопросе невозможен.Вы не можете добавить одно и то же свойство дважды, чтобы # 1 не работал.Вы не можете добавить две привязки, чтобы # 2 не работал.Я бы добавил свойство NotifyControls в качестве типа List.NotifyControl все еще может быть доступен как отдельный элемент или для добавления в список элементов управления в NotifyControls.Вы можете добавить элементы в Xaml:

<MyControl.NotifyControls>
    <ControlWrapper Control="{Binding ElementName=a}"/>
    <ControlWrapper Control="{Binding ElementName=b}"/>
</MyControl.NotifyControls>

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

0 голосов
/ 27 июля 2011

Если N фиксировано, вы можете использовать MultiBinding (с конвертером):

<MyControl>
    <MyControl.NotifyControl>
        <MultiBinding Converter="...">
            <Binding ElementName="controlA" />
            <Binding ElementName="controlB" />
            <Binding ElementName="controlC" />
            <Binding ElementName="controlD" />
            <Binding ElementName="controlE" />
            ...
        </MultiBinding>
    </MyControl.NotifyControl>
</MyControl>

Если N изменяется, можно добавить ObservableCollection <> к вашему классу, в который вы добавляете / удаляете элементы управления, а затем привязываете его (опять же, с помощью конвертера)

<MyControl NotifyControl="{Binding ElementName=ParentElement, Path=MyObservableCollection, Converter=...}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...