在UserControls,主窗口的所有选项卡式子项之间交换数据

时间:2012-12-10 14:03:35

标签: c# wpf c#-4.0

我是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>

这来自Infragistics的高性能图表样本,

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

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

似乎没有本地机制可以交换,甚至不会说将数据从一个用户控件分发到其他UserControl,至少不是我所知道的; - /

我确实拥有当前“示例”应用程序的代码,但它很长。所以为了简单起见,我决定不予考虑。我不希望这里的任何人提供代码响应,而是指向文档的指针,解决从一个UserControl向其他人分发数据的问题,如果有这样的事情,那么我将能够自己解决问题。 或者也许只是建议如何做到这一点。

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

我希望有人有一个建议..如果您需要我会很乐意发布相关的代码片段 谢谢你,问候 保罗

1 个答案:

答案 0 :(得分:1)

读取数据的线程应该封装在自己的类中。然后创建此类的一个实例,并将该实例传递给需要访问数据的所有用户控件 当然,线程读取的数据应该写入新类所拥有的数据结构中,而不是当前的SerialPort控件。