2013-07-18 3 views
1

Я хотел бы использовать свойство ItemsSource определенного элемента как одно из привязок в MultiBinding другого элемента. Вот то, что я до сих пор:Использовать свойство ItemsSource другого элемента в MultiBinding

<Label> 
    <Label.Content> 
    <MultiBinding Converter="{converters:myMultiValueConverter}"> 
     <Binding Path="PageIndex" /> 
     <Binding ElementName="anotherElement" Path="ItemsSource"/> 
    </MultiBinding> 
    </Label.Content> 
</Label> 

Это работает один раз (когда ItemsSource изначально установлен), но связывание не может обновиться, когда ObservableCollection обязан ItemsSource собственности оригинальный элемент имеет элементы добавлены или удалены. Возможно ли такое связывание?

+2

Это действительно звучит и выглядит как-то, что я предпочитаю решать на уровне ViewModel. Что делает ваш 'myMultiValueConverter'? –

+0

Согласитесь с @HighCore - вы ставите логику на ваш взгляд, по существу - вы должны увеличить это до вашего ViewModel и обрабатывать его там. – JerKimball

ответ

4

Добавить соску связывания (- вам не нужно значение -), как это, чтобы заставить MultiBinding быть перепроверены:

<Binding ElementName="anotherElement" Path="ItemsSource.Count"/> 

Edit: Просто заметил недостаток: Если переместить элементы, которые не будет регистрироваться, если это не изменит свойство Count между ними, возможно, это актуально для вас. В этом случае вы можете привязываться к своему собственному манекену, для которого вы можете отправлять уведомления об изменении на CollectionChanged (не все, что чист в любом случае).

Возможно, вы захотите рассмотреть предложение HighCore, свойство get -only, которое возвращает вычисленное значение, для которого вы вручную стреляете PropertyChanged во все места, от которых оно зависит, как правило, довольно удобно.

+0

Это гениально. – McGarnagle

+0

Отлично, делает то, что мне нужно. В моем конкретном случае мне не нужно беспокоиться о перемещении предметов - они будут добавляться или удаляться. –

+0

@friendlycello: Рад слышать, что сработало тогда :) –