WPF Binding innere Kontrolle mit übergeordneten Daten-Kontext
Machte ich ein user control
<UserControl x:Class="MyApp.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" x:Name="uc">
<Grid Width="Auto" Height="Auto">
<TextBlock Text="{Binding Path=DataContext.TextContent, ElementName=uc}"/>
<TextBlock Text="{Binding Path=DataContext.TextContent2, ElementName=uc}"/>
</Grid>
Ich möchte die sub-controls im angegebenen control(uc) binden, um die Eigenschaften von uc.DataContext. Ich verwendet, die definiert Steuern wie folgt:
<Window x:Class="Tms.TMSClient.Views.MainWindow" Name="window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:control="clr-namespace:MyApp"
xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary">
<control:MyControl DataContext="{Binding Path=MyControlVM}"/>
DataContext zugewiesen ist, um die Fenster hat diese Struktur: WindowVM.MyControlVM.TextContent.
Den angegebenen code funktioniert nicht, weil die textbox den DataContext gebunden ist WindowVM statt. Ich denke, das problem kann sein, weil die innere textbox gebunden ist, bevor die definierten control (uc) ist, so ist die begrenzt DataContext für uc nicht wirksam werden, noch nicht.
Was ich will, ist: die custom controls (MyControl) wird an seine entsprechende viewmodel (MyControlVM), und die inneren Elemente von MyControl wird gebunden werden, um die Eigenschaften von MyControlVM.
Haben Sie irgendwelche Lösungen für dieses problem?
DataContext = this
im MyApp.MyControl
? Auch, wenn Sie sich nicht ändern DataContext
Kontrolle {Binding TextContent}
sollte genug seinSie setzen
MyControlVM.DataContext
zu MyControlVM
, und da es vererbt durch visuelle Struktur, alles drin, standardmäßig und bis Sie Sie ändern müssen, dass DataContext
. In Ihrem Fall TextBlock
, Grid
und UserControl
wird haben gleichen DataContext
Satz, der von außen an MyControlVM
InformationsquelleAutor Thomas Lee | 2014-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
funktioniert bei mir in meiner test-Anwendung.
MainWindow.xaml
MyControl.xaml
DataContexts:
InformationsquelleAutor mDC
Wenn ich Sie richtig verstehe, wollen Sie die Daten zu binden, eine Eigenschaft von Ihr
MyControl
view-Modell zu einemTextBox.Text
Immobilie innerhalb derMyControl UserControl
. Wenn das richtig ist, dann können Sie einenRelativeSource Binding
, oder dieElementName
syntax, die Sie bereits verwenden.Erstens, stellen Sie sicher, dass Ihr view-Modell als
DataContext
für dieUserControl
:Als Kind steuert automatisch die Erben Ihre Eltern
DataContext
Objekte, können Sie jetzt mit einem Verweis auf diesen view-Modell aus derTextBox
durch dieMyControl.DataContext
Eigenschaft aus derUserControl
's XAML:Das ist alles, was Sie brauchen.
InformationsquelleAutor Sheridan
Standardmäßig jedes Steuerelement erbt seine DataContext vom übergeordneten Steuerung. So gibt es keine Notwendigkeit, explizit zu binden.
In der Tat, wenn Sie möchten binden eines Steuerelements DataContext einer nested-Eigenschaft musst du dann angeben:
Wow @ThomasLee, du bist wirklich nicht hören, wer hier ist, oder? DIE
DataContext
AUTOMATISCH VERERBT ALLE UNTERGEORDNETEN STEUERELEMENTE STANDARDMÄßIG. Ich sehe kein problem mit Ihrem code, wie es steht, so müssen Sie etwas anderes zu stören.InformationsquelleAutor Dennis Kassel