我是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生成的任何对象实例。
我希望有人有一个建议..如果您需要我会很乐意发布相关的代码片段 谢谢你,问候 保罗
答案 0 :(得分:1)
读取数据的线程应该封装在自己的类中。然后创建此类的一个实例,并将该实例传递给需要访问数据的所有用户控件 当然,线程读取的数据应该写入新类所拥有的数据结构中,而不是当前的SerialPort控件。