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?

Das tun Sie, indem Sie eine chance, etwas zu tun DataContext = this im MyApp.MyControl? Auch, wenn Sie sich nicht ändern DataContext Kontrolle {Binding TextContent} sollte genug sein
Sie 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

Schreibe einen Kommentar