在WPF中,如何从嵌套的用户控件访问Window.xaml中定义的对象?

时间:2009-08-04 21:38:24

标签: c# .net wpf xaml combobox

我遇到一种情况,我需要从嵌套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绑定的方式不起作用。我需要告诉它向窗口查找树。这是我不知道该怎么做。

请帮忙。

非常感谢。

1 个答案:

答案 0 :(得分:2)

SelectedItem=”{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.SelectedValue}”