Detaillierung @Steven Sie beantworten, in Ihrem UserControl definieren Sie eine DependencyProperty
. Wenn Sie DependencyProperty
definieren, können Änderungsbenachrichtigungen Aktualisierungen für Ihre Steuerelemente auslösen.
Im Code-Behind Ihres Benutzersteuerelements können Sie die Abhängigkeitseigenschaft hinzufügen.
public partial class MyUserControl : UserControl
{
public string TextBlockText
{
get { return (string)GetValue(TextBlockTextProperty); }
set { SetValue(TextBlockTextProperty, value); }
}
public static readonly DependencyProperty TextBlockTextProperty =
DependencyProperty.Register("TextBlockText", typeof(string), typeof(MyUserControl), new UIPropertyMetadata(""));
public MyUserControl()
{
InitializeComponent();
DataContext = this;
}
}
Dies setzt eine öffentliche DependencyProperty
, die Sie in Ihrem Usercontrol XAML binden können.
<UserControl>
<TextBlock Text="{Binding Path=TextBlockText}" />
</UserControl>
Jetzt brauchen Sie einen Weg, um diese Eigenschaft von Ihrem Fenster-Steuerelement zu setzen. Ich werde Detail drei Möglichkeiten, in denen Sie dies tun:
1.) Da die TextBlockText
Eigenschaft auf dem Usercontrol ausgesetzt ist, können wir es direkt in der XAML festlegen wie:
<Window x:Class="WpfApplication2.MainWindow"
xmlns:local="clr-namespace:WpfApplication2">
<local:MyUserControl TextBlockText="Text that you want to set.">
</local:MyUserControl>
</Window>
2.) Wenn wir geben dem Usercontrol einen Namen wir das Objekt im Fenster Code-Behind ändern können:
<Window x:Class="WpfApplication2.MainWindow"
xmlns:local="clr-namespace:WpfApplication2">
<local:MyUserControl Name="CoolUserControl">
</local:MyUserControl>
</Window>
-
CoolUserControl.TextBlockText = "Text that you want to set.";
3.) Oder schließlich können Sie eine andere DependencyProperty
innerhalb Ihrer Window
's Code-behind und binden Sie es an die UserControl
' s Abhängigkeitseigenschaft. Auf diese Weise ändert sich bei jeder Aktualisierung der Eigenschaft der Wert in Ihrem Window
Code die UserControl
Abhängigkeitseigenschaft ebenfalls. Dies ist die bevorzugte Wahl als @Steven, die Sie zuvor gesagt haben, da Ihr Code hinter nichts über irgendwelche Kontrollen wissen muss.
public partial class MainWindow : Window
{
public string UserControlText
{
get { return (string)GetValue(UserControlTextProperty); }
set { SetValue(UserControlTextProperty, value); }
}
public static readonly DependencyProperty UserControlTextProperty =
DependencyProperty.Register("UserControlText", typeof(string), typeof(MainWindow), new UIPropertyMetadata(""));
public MainWindow()
{
InitializeComponent();
DataContext = this;
UserControlText = "Text that you want to set.";
}
}
Und zu unserem neuen DependencyProperty
im Fenster XAML zu binden:
<Window x:Class="WpfApplication2.MainWindow"
xmlns:local="clr-namespace:WpfApplication2">
<local:MyUserControl TextBlockText="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}, Path=UserControlText}"></local:MyUserControl>
</Window>
hoffe, das hilft!
Können Sie ein kleines Beispiel dafür geben? –
Lesen Sie dies: http: //www.codeproject.com/Articles/224230/Exploring-the-Verwendung-der-Abhängigkeit-Eigenschaften-im-Benutzer –
Werfen Sie einen Blick auf diese Datenbindung [Beispiel] (http://code.msdn.microsoft.com/windowsapps/Data-Binding- 7b1d67b5) –