Странное поведение привязки к двум разным свойствам зависимости у одного объекта. Есть вьюмодель Game, имеющая три свойства - Red, Blue и Turn. Вьюмодель устанавливается в DataContext. Также есть юзерконтрол MageControl установленной вьюмоделью Mage. Привязываю к MageControl.DataContext одно из свойств Game - всё отлично работает, студия подсказывает, какое свойство устанавливать из вьюмодели (Red или Blue).
<Window ...>
<Window.DataContext>
<game:Game/>
</Window.DataContext>
<local:MageControl DataContext="{Binding Red}"/> <!-- всё отлично работает -->
</Window>
Теперь пытаюсь передать в юзерконтрол ссылку на текущую вьюмодель, создал свойство зависимости, и пытаюсь привязать к ней данные из вьюмодели.
public partial class MageControl : UserControl
{
public int Turn
{
get { return (int)GetValue(TurnProperty); }
set { SetValue(TurnProperty, value); }
}
public static DependencyProperty TurnProperty = DependencyProperty.Register("Turn", typeof(int), typeof(MageControl));
}
Теперь пытаюсь привязать данные:
<Window ...>
<Window.DataContext>
<game:Game/>
</Window.DataContext>
<StackPanel>
<local:MageControl DataContext="{Binding Red}"/> <!-- привязка к DataContext отлично работает -->
<local:MageControl DataContext="{Binding Blue}" Turn="{Binding Turn}"/> <!-- привязка к Turn не работает! -->
</StackPanel>
</Window>
При попытке привязывания к свойству Turn не предлагает варианты из вьюмодели (хочу привязать Turn), а предлагает варианты из вьюмодели MageControl.
В общем, вопрос в следующем - почему у разных свойств одного элемента предлагается разный набор свойств для привязки. К свойству MageControl.DataContext предлагается набор свойств от вьюмодели окна, а к свойству MageControl.Turn предлагается набор свойств из вьюмодели MageControl.
Если настроить привязку к родителю - то предлагает что надо:
<local:MageControl DataContext="{Binding Red}"
Turn="{Binding Turn, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type game:Game}}}" /> <!-- работает -->
Но привязка не работает - не срабатывает ни разу.