ich einen Benutzerkontrolle in wpf „GoogleMap.xaml/.cs“, wo die XAML-Deklaration beginnt wie folgt benannt haben:WPF: Bindungseigenschaft einer Klasse Abhängigkeit, die ein Benutzersteuerbasisklasse erbt
<controls:BaseUserControl x:Class="CompanyNamespace.Controls.GoogleMap"
der Code hinter:
public partial class GoogleMap : BaseUserControl{
public static readonly DependencyProperty MapCenterProperty =
DependencyProperty.Register("MapCenter", typeof(string), typeof(GoogleMap), new FrameworkPropertyMetadata(string.Empty, OnMapCenterPropertyChanged));
public string MapCenter {
get { return (string)GetValue(MapCenterProperty); }
set { SetValue(MapCenterProperty, value); }
}
private static void OnMapCenterPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e){
GoogleMap control = source as GoogleMap;
control.SetCenter(e.NewValue.ToString());
}
...
}
Was die korrekte Syntax für mich die Eigenschaft von GoogleMap.xaml ansprechen zu können:
MapCenter="{Binding Location}"
Ich kann nur von GoogleMap.xaml aus an diese Eigenschaft binden, wenn ich die Eigenschaft in die BaseUserControl-Klasse platziere.
aktualisieren GoogleMapViewModel.cs
public class GoogleMapViewModel : ContainerViewModel{
private string location;
[XmlAttribute("location")]
public string Location {
get {
if (string.IsNullOrEmpty(location))
return appContext.DeviceGeolocation.Location();
return ExpressionEvaluator.Evaluate(location);
}
set {
if (location == value)
return;
location = value;
RaisePropertyChanged("Location");
}
}
Da Sie von der Basisklasse erben es sollte keine Rolle spielen, wo Sie die Eigenschaft setzen. Wie sieht dein 'DataContext' aus? –
Ich denke, es wäre besser, ein benutzerdefiniertes Steuerelement zu erstellen und sein Erscheinungsbild in einer 'ControlTemplate' zu definieren. –
hat die VM dort hinzugefügt – jchristof