Ich möchte eine Benutzersteuerungseigenschaft auf den Wert einer Eigenschaft in einem übergeordneten Steuerelement festlegen. Nehmen wir beispielsweise an, dass mein Hauptfenstersteuerelement einige anfängliche Konfigurationsdaten enthält. Derzeit verwende ich die folgenden in XAML:Verknüpfen der Benutzersteuerungseigenschaft mit der benannten übergeordneten Eigenschaft
<Window x:Class="MyProject.MainWindow"
x:Name="TopWindow" ... >
...
<local:MyUserControl Config="{Binding ElementName=TopWindow,
Path=MyUserControlConfig, Mode=OneTime}" />
</Window>
Aber dies scheint zwei Abhängigkeitseigenschaften zu erfordern, eine in der Mainwindow (MyUserControlConfig):
namespace MyProject
{
public partial class MainWindow: Window
{
public static readonly DependencyProperty MyUserControlConfigProperty=
DependencyProperty.Register("MyUserControlConfig",
typeof(UserControlConfig), typeof(MainWindow));
public UserControlConfig MyUserControlConfig
{
get { return (UserControlConfig)
GetValue(MyUserControlConfigProperty); }
set { SetValue(MyUserControlConfigProperty, value); }
}
}
}
und eine in MyUserControl (Config):
namespace MyProject
{
public partial class MyUserControl: UserControl
{
public static readonly DependencyProperty ConfigProperty=
DependencyProperty.Register("Config",
typeof(UserControlConfig), typeof(MainWindow));
public UserControlConfig Config
{
get { return (UserControlConfig) GetValue(ConfigProperty); }
set { SetValue(ConfigProperty, value); }
}
}
}
Ich muss wirklich keine Änderungen beobachten, nur um Daten zum Zeitpunkt der Erstellung in meine Benutzersteuerung zu übergeben. Ist dies mit einfachen Eigenschaften für mindestens eines der beiden möglich oder muss ich zwei Abhängigkeitseigenschaften verwenden, um diese (einmalige) Initialisierung durchzuführen?
aktualisieren: Jay-Lösung läßt uns mit nur einer CLR-Eigenschaft in der Mainwindow-Klasse:
namespace MyProject
{
public partial class MainWindow: Window
{
public UserControlConfig MyUserControlConfig {get; private set;}
...
}
}
Nun, wenn es nur möglich war, die Abhängigkeitseigenschaft von der MyUserControl Klasse zu entfernen und ersetzen Sie es mit einem einfachen Eigenschaft, die immer noch über XAML-Bindung (oder einen anderen XAML-Mechanismus) initialisiert wird, sodass ich die Datenquelle über XAML übergeben kann.
Die MyUserControlConfig-Eigenschaft im UserControl muss keine Abhängigkeitseigenschaft sein, eine normale CLR-Eigenschaft funktioniert problemlos. Eine Abhängigkeitseigenschaft ist nur erforderlich, wenn Sie die Eigenschaft an etwas anderes binden möchten, also muss Config ein DP sein –
@Meleak Ich denke, dass rückwärts ist? 'ConfigProperty' sollte eine DP sein und' MyUserControlConfigProperty' muss nicht vorhanden sein, da erstere an die letztere bindet. – Jay
@Jay: In der Tat war es :) Ich schaute auf die Frage erneut und aktualisierte meinen Kommentar –