Вам не нужно DataContext={Binding}
, поскольку это равносильно DataContext = DataContext
.
Однако вам не хватает информации о типе.Привязки используют отражение для разрешения путей к свойствам, однако при выделении кода вам нужно будет знать тип объекта, возвращаемого DataContext
.
Если вы можете быть в этом уверены, тогда это будет просто: -
myWebBrowser.NavigateToString(((MyType)DataContext).MyHTMLString);
Если вы не можете быть уверены в типе и / или не можете убедить того, кто контролирует хост ваших элементов управления, обеспечить реализацию хотя бы определенного интерфейса с известными членами, тогда вам может потребоватьсяприбегнуть к рефлексии самостоятельно.
Используйте систему привязки, чтобы сделать рефлексию для вас
Альтернатива, если вы не можете знать тип, только имя свойства: -
public string HTMLString
{
get { return (string)GetValue(HTMLStringProperty); }
set { SetValue(HTMLStringProperty, value); }
}
public static DependencyProperty HTMLStringPropery =
DependencyProperty.Register(
"HTMLString",
typeof(string),
typeof(SomeControl),
null);
Теперь, если вы уверены, что знаете имя свойства, которое хотите связать, вы можете установить привязку в коде в конструкторе элементов управления: -
SetBinding(HTMLStringProperty, new Binding("MyHTMLString"));
При этом ваш код будет выглядеть так: -
myWebBrowser.NavigateToString(HTMLString);
В качестве альтернативы вы можете сделать связывание этого нового свойства вашего контроля ответственностью Xaml: -
<DataTemplate x:Key="AnImportantIdentifierUsedByTheHostApp">
<MyControls:SomeControl HTMLString="{Binding MyHTMLString}" />
</DataTemplate>