我遇到一种情况,我需要从嵌套2级深度的用户控件中访问已在一个用户控件中定义的对象。以下面的例子为例:
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>
请忽略缺少的Property更改事件等,因为它仅用于示例目的
以上基本上显示了我的设置。 2个嵌套用户控件,其中底层一级UC2尝试将所选组合框项目设置为Window xaml(MyClass)中定义的对象的SelectedValue属性。问题是我指定SelectedItem绑定的方式不起作用。我需要告诉它向窗口查找树。这是我不知道该怎么做。
请帮忙。
非常感谢。
答案 0 :(得分:2)
SelectedItem=”{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.SelectedValue}”