如何将实例从主窗口发送到用户控件

时间:2014-05-07 16:37:46

标签: c# wpf user-controls

目标:
减少紧耦合并增加用户控制1和2的松耦合。

问题:
是否可以从主窗口向用户控件1和2发送一些实例?
如果是,您是否有关于它的示例或推荐链接?

信息:
- 我正在使用VS 2013

enter image description here

Xaml代码:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:usercontrol_menu="clr-namespace:usercontrol_menu;assembly=usercontrol_menu" xmlns:usercontrol_kassa="clr-namespace:usercontrol_kassa;assembly=usercontrol_kassa" x:Class="main_system.MainWindow"
        Title="MainWindow" Height="900" Width="1300         ">
    <Grid>
        <Frame x:Name="mainFrame"/>
        <ContentControl x:Name="cc_content" Content="ContentControl" HorizontalAlignment="Left" Margin="482,144,-228,0" VerticalAlignment="Top" Height="298" Width="1038"/>
        <usercontrol_menu:UserControl1 HorizontalAlignment="Left" VerticalAlignment="Top"/>
        <usercontrol_kassa:UserControl1 HorizontalAlignment="Left" Margin="10,344,0,0" VerticalAlignment="Top"/>
    </Grid>
</Window>

3 个答案:

答案 0 :(得分:0)

考虑使用Window.GetWindow方法。

http://msdn.microsoft.com/en-us/library/system.windows.window.getwindow(v=vs.110).aspx

var wnd = Window.GetWindow(this); //Assuming this is a user control (or any DependencyObject).

答案 1 :(得分:0)

here

您也可以对PRISM

感兴趣

因此,一旦你拥有了IoC容器,就可以将它传递给你所有的UserControls(通过ViewModels或其他东西),并使用它,你可以访问你在其中注册的任何内容。

答案 2 :(得分:0)

在ctor中传递引用

namespace UserControlPassReference
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            UserControl1 uc1 = new UserControl1(this);
        }
    }
}

namespace UserControlPassReference
{
    public partial class UserControl1 : UserControl
    {
        private Window main;
        public UserControl1()
        {
            InitializeComponent();
        }
        public UserControl1(Window Main)
        {
            InitializeComponent();
            main = Main;
        }
    }
}