J'ai une situation où j'ai besoin d'accéder à un objet qui a été défini dans un contrôle utilisateur à partir d'un contrôle utilisateur imbriqué 2 niveaux de profondeur. Prenez ce qui suit par exemple:Dans WPF, comment accéder à un objet défini dans Window.xaml à partir d'un contrôle utilisateur imbriqué?
public class MyClass
{
public MyClass()
{
MyData = new MyDataProvider();
}
public MyDataProvider MyData;
public string SelectedValue;
}
public class MyDataProvider
{
public MyDataProvider()
{
MyList = new List<string>() { "Test1", "Test2", "Test3" };
}
public List<string> MyList;
}
Window.xaml
<Window.DataContext>
<my:MyClass></my:MyClass>
</Window.DataContext>
<Grid>
<my:UC1></my:UC1>
</Grid>
UC1.xaml
<Grid Height="Auto" Width="316">
<my:UC2 Margin="0,0,41,52" DataContext="{Binding Path=MyData}"/>
<TextBox Text="{Binding SelectedValue}" Margin="22,73,119,113" />
</Grid>
UC2.xaml
<Grid>
<StackPanel>
<Label Content="My List"/>
<ComboBox Name="comboBox1" ItemsSource="{Binding Path=MyList}"
SelectedItem="{Binding Path=SelectedValue}"/>
</StackPanel>
</Grid>
S'il vous plaît ignorer la propriété manquante changé événements etc comme est juste à titre d'exemple
Ce qui précède vous montre essentiellement ma configuration. 2 contrôles utilisateur imbriqués où le niveau inférieur, UC2, tente de définir l'élément de liste déroulante sélectionné sur la propriété SelectedValue de l'objet défini dans la fenêtre xaml (MyClass). Le problème est que la façon dont j'ai spécifié la liaison SelectedItem ne fonctionne pas. Je dois lui dire de regarder l'arbre à la fenêtre. C'est ce que je ne sais pas faire.
Aidez-nous s'il vous plaît.
Merci beaucoup.
Cela fonctionne bien, mais est-ce le seul moyen? Cela semble un peu un hack comme si je veux trouver un élément qui est un parent d'un élément du même type. c'est-à-dire –
HAdes
Dans ce cas, vous avez AncestorLevel, par ex. SelectedItem = "{Liative RelativeSource = {RelativeSource FindAncestor, AncestorType = {x: Fenêtre Type}}, AncestorLevel = 2, Path = DataContext.SelectedValue}" –