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 控件报告。

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

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

我确实有当前“示例”应用程序的代码,但是它很长。所以为了简单起见,我决定把它排除在外。我不希望这里的任何人提供代码响应,而是指向文档的指针,该文档解决了将数据从一个 UserControl 分发给其他人的问题,如果有这样的话,这样我就可以自己解决问题. 或者也许只是一个建议如何做到这一点。

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

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

4

1 回答 1

1

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

于 2012-12-10T14:14:48.437 回答