0

我的 WPF 表单正在使用多个用户控件。这些代表独特的形式。我需要提供导航功能。

一旦用户单击 UserControl A 上的 EDIT 按钮,我想绑定 UserControl B 的 DataContext 并在主窗体上打开此用户控件。

此主窗体包含两个用户控件。我怎样才能做到这一点?

这就是我的代码的样子

<Window>
        <TabControl  Background="Transparent">
            <TabItem Header="View Registration" Background="Transparent">
                <my:BulkPersonRegistration x:Name="BulkPersonRegistrationForm" />
            </TabItem>
            <TabItem Header="Add/Update Person" Background="Transparent">
                <my:PersonManager x:Name="PersonManagerForm" />
            </TabItem>
        </TabControl>
</Window>

BulkPersonRegistration 用户控件调用用于数据绑定的函数以显示数据网格。绑定数据网格后,编辑按钮出现在每一行之后。当用户单击编辑按钮时,我希望 PersonManager 表单被编辑行的对象绑定。问题是,BulkPersonRegistration 表单不知道 PersonManagerForm。所以我需要一种方法来找出 BulkPersonRegistration 的父表单,即所有者表单,然后找到 Personmanager 表单,最后设置它的数据上下文。我认为所有这些都需要在 BulkRegistration 表单上完成。我宁愿在 Window 上执行此操作,而不是在用户控件上执行此操作。

请建议。

4

2 回答 2

0

您可以按照这些思路创建布局...

<DockPanel>
    <Button DockPanel.Dock="Top" 
            Content ="EDIT" 
            Height="30" 
            Width="150"
            Click="ButtonBase_OnClick"
            />
    <TextBlock DockPanel.Dock="Top" Name="Control1" DataContext="{Binding}" Background="Yellow"/>
    <TextBlock DockPanel.Dock="Top" Name="Control2" Visibility="Collapsed" Background="Green"/>
    <Rectangle DockPanel.Dock="Top"></Rectangle>
</DockPanel>

在点击处理程序中,您可以设置第二个控件的数据上下文...

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    Control2.DataContext = Control1.DataContext;
    Control2.Visibility = Visibility.Visible;
}

此代码段使第二个控件可见,并使第一个控件与第二个控件共享其数据上下文。您实际上可以将控件的数据上下文设置为任何内容,但此代码段假定它是相同的数据上下文。设置控件的可见性将使其“打开”。

于 2013-07-27T16:39:07.730 回答
0

嗨,您可以通过像这样使用ElementName绑定来实现这一点

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <local:UserControl1 x:Name="uc1"/>
    <local:UserControl2 Grid.Row="1" DataContext="{Binding DataContext, ElementName=uc1}"/>
</Grid>

我希望这将有所帮助。

于 2013-07-27T17:35:25.883 回答