C# 在用户控件之间交换数据,主窗口的所有选项卡式子控件

C# 在用户控件之间交换数据,主窗口的所有选项卡式子控件,c#,wpf,c#-4.0,C#,Wpf,C# 4.0,我是WPF/C#的新手,所以这对你们中的许多人来说可能是最基本的。请原谅我的无知。如果是这样的话,我所需要的只是一个指向一个简单代码示例的指针,您认为这可能会有所帮助。 我搜索了这个。。但是没有找到任何现有的解决方案来帮助我,所以我想这可能不是做事的方式。。。 我用C++做了类似的事情,使用指针,这不是我能在C语言中复制的。WPF 不管怎样,以下是我要做的: 我有一个带有选项卡式子窗口的主窗口,所有类型都是UserControl,用XAML定义 <Window x:Class="High

我是WPF/C#的新手,所以这对你们中的许多人来说可能是最基本的。请原谅我的无知。如果是这样的话,我所需要的只是一个指向一个简单代码示例的指针,您认为这可能会有所帮助。 我搜索了这个。。但是没有找到任何现有的解决方案来帮助我,所以我想这可能不是做事的方式。。。 我用C++做了类似的事情,使用指针,这不是我能在C语言中复制的。WPF

不管怎样,以下是我要做的: 我有一个带有选项卡式子窗口的主窗口,所有类型都是UserControl,用XAML定义

<Window x:Class="HighPerformanceScenarios.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:igEditors="http://infragistics.com/Editors"
        xmlns:local="clr-namespace:HighPerformanceScenarios"
        Title="MainWindow" Height="600" Width="800" xmlns:ig="http://schemas.infragistics.com/xaml">
    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="0" Background="LightBlue">
            <TextBlock Text="Infragistics High-Performance XamDataGrid and XamDataChart" FontSize="20" Margin="0 10 0 10"/>
        </StackPanel>
        <TabControl Grid.Row="1">
            <TabItem Header="XamDataChart (Real-Time Data)" >
                <local:XamDataChartRealTimeData />
            </TabItem>
            <TabItem Header="RealTimeDisplay">
                <local:RealTimeDisplay />
            </TabItem>
            <TabItem Header="XamDataGrid High Performance">
                <local:XamDataGridHighPerformance />
            </TabItem>
            <TabItem Header="Serial Port">
                <local:SerialPortClass />
            </TabItem>            
        </TabControl>
    </Grid>
</Window>

这来自Infrastics的高性能图表样本

在其中一个选项卡式控件项中,UserControl是一个管理串行端口连接并处理传入数据(二进制形式的100Hz双倍数据包流)的类。 此UserControl(称为SerialPort)将读取串行端口、处理二进制流并将其记录到文件中的任务委托给一个单独的线程(RunWorkerAsync…)。每当一个新数据包准备好保存在“SerialPort控件本地可用”数据记录变量(double[18])中时,这个永远运行的线程异步地向SerialPort控件报告

其他用户控件是显示控件。一个是一组仪表,另一个是实时图表等等。它们都有自己的数据源(图表的数据集合或仪表的单个值)。这些图表控件通过数据绑定机制绑定到其数据源。 现在,我需要一种方法将传入的串行数据提供给其他UserControl的数据源,以便它们能够实时显示传入的数据

似乎没有一种本机机制来交换数据,甚至不会说将数据从一个用户控件分发到其他用户控件,至少我不知道这一点-/

我确实有当前“示例”应用程序的代码,但它相当长。所以为了保持简单,我决定把它删掉。我不希望这里的任何人提供代码响应,而是一个指向文档的指针,该文档解决了将数据从一个用户控件分发到其他用户控件的问题(如果有),这样我就能够自己解决问题。 或者也许只是一个建议如何做到这一点

我试图访问主窗口句柄,以便能够访问其子窗口,但未能获取XAML生成的对象的任何实例

我希望有人能给我一个建议。。如果您需要,我将很乐意发布相关的代码片段 谢谢你和问候
Paolo

读取数据的线程应该封装在自己的类中。然后创建此类的一个实例,并将该实例传递给需要访问数据的所有用户控件。

当然,线程读取的数据应该写入新类拥有的数据结构中,而不是像目前那样由SerialPort控件拥有。

首先感谢您的回复和建议。问题是,串行端口是驱动数据进程的端口,将其作为实例化对象传递给usercontrol,需要在接收控件中注册一个“data available”事件,然后调用串行端口对象并获取数据。我宁愿做相反的事。。。也就是说,将另一个控制对象和它们的公共方法传递到串行端口,以更新数据源。在C++中,通过主窗口句柄可以轻松地获得指针,但是在C语言的WPF下。我不知道在我找到这个[链接]()的同时,它正是我所需要的,它只是一个开销,但非常优雅。。所以我会用它。我不确定是否有直接的方法可以在不编码消息传递系统的情况下访问控制对象。可能不是。。。