2016-07-21 7 views
-1

в MultiBinding если DataContext устанавливаются в качестве VM1 и C является свойством, что, возможно, чтобы сделать вторую привязку к различным DataContext, как VM2 и привязать его к D собственности в VM2 ?MultiBinding к двум различным DataContexts в WPF

<MultiBinding Converter="{StaticResource UnitConverter}"> 
     <Binding Path="C"/> 
     <Binding Path="D"/> 
</MultiBinding> 

ответ

3

Быстрый ответ, да! Если вы, например, имеете сетку с Datacontext VM2, и внутри нее у вас есть Stackpanel с Datacontext VM1. Теперь вы можете использовать RelativeSource, чтобы получить правильный Datacontext, путешествуя по визуальному дереву. Я не на моем ноутбуке окна атм, но это должно выглядеть примерно так ..

<MultiBinding Converter="{StaticResource UnitConverter}"> 
    <Binding Path="DataContext.D" RelativeSource={RelativeSource Mode=FindAncestor, TargetType=Grid/> 
    <Binding Path="C"/> 
</MultiBinding> 

Я надеюсь, что это помогло

Этот вопрос также может быть полезным: How to get a parent value in multibinding

+0

Но что, если второй контекст данных не определен в визуальном дереве? – Vahid

+0

Вам нужно иметь ссылку на него. Возможно, свойство в первом Datacontext, которое приводит, например, к второй модели представления. В противном случае, насколько я знаю, это невозможно, к сожалению –

2

Я извиняюсь , Точный ответ Невозможно. То, что вы говорите, невозможно, так как datacontext установлен в какую-либо модель представления, скажем VM1, и шаблон будет искать некоторое свойство внутри этого самого контекста данных.

<MultiBinding Converter="{StaticResource UnitConverter}"> 
     <Binding Path="C"/> 
     <Binding Path="D"/> 
</MultiBinding> 

В приведенном выше коде C и D должны находиться внутри одного и того же текста данных. Или же вам нужно создать новый ViewModel, который содержит свойство подмоделей зрения, так что свойства юга ViewModel могут быть доступны, как показано ниже:

<MultiBinding Converter="{StaticResource UnitConverter}"> 
     <Binding Path="VM1.C"/> 
     <Binding Path="VM2.D"/> 
</MultiBinding> 

где VM1 и VM2 образцовых экземпляры вид создаются как свойства в DataContext посмотреть модель.