RelativeSource vs. ElementName
Эти два подхода могут достичь того же результата,
RelativeSrouce
Binding="{Binding Path=DataContext.MyBindingProperty,
RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
Этот метод ищет контроль над окном типа (в этом примере) в визуальном дереве, и когда он его находит, вы в основном можете получить доступ к DataContext
, используя Path=DataContext....
. Плюсы этого метода заключаются в том, что вам не нужно привязываться к имени, и это своего рода динамика, однако изменения, внесенные в ваше визуальное дерево, могут повлиять на этот метод и, возможно, сломать его.
ElementName
Binding="{Binding Path=DataContext.MyBindingProperty, ElementName=MyMainWindow}
Этот метод относится к твердому статическому Name
, так что пока ваша область видится, вы в порядке. Вы должны придерживаться своего соглашения об именах, а не для разрыва этого метода, конечно. Подход является простым простым, и все, что вам нужно, это указать Name="..."
для вашего окна / UserControl.
Хотя все три типа (RelativeSource, Source, ElementName
) способны выполнять То же самое, но в соответствии со следующей статьей MSDN, каждый из них лучше использовать в своей области специальности.
Найдите краткое описание каждого из них плюс ссылку на более подробную информацию в таблице внизу стр.