在c# /WPF中向另一个类发送事件时遇到问题
本文关键字:事件 问题 遇到 另一个 WPF | 更新日期: 2023-09-27 18:08:55
我对OOD, c#, WPF相对较新,但正在努力学习。我有一个主XAML里面有一些控件。一个控件是DataGrid (dtGrid)。DataGrid背后有自己的代码,并为它的类提供一些方法。我试图创建一个事件,当滚动是水平完成。我有这个:
private void dtGrid_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
if (e.HorizontalChange != 0)
{
// update some stuff to main XAML
}
}
我看不出dtGrid对主XAML有什么可见性。由于dtGrid (DataGrid控件)在我放置这个方法的地方有它自己的代码,所以我没有引用主XAML中的其他控件的名称。有办法绕过这个吗?谢谢。
编辑:额外的代码和一些伪代码为简洁所以我的主类有主XAML:<UserControl>
<GroupBox Header="Sample" Grid.Row="2" Margin="5, 0, 5, 0" FontSize="12" FontFamily="Arial" FontWeight="Bold">
<View:SampleControl x:Name="SampleControl" Background="Transparent" />
</GroupBox>
</UserControl>
我在这个XAML后面有代码,当滚动改变时,我需要对另一个对象进行更新。然而,我的问题是我有另一个XAML的SampleControl它是:
<some UserControl and the namespaces>
<DataGrid x:Name="dtGridReads" AutoGenerateColumns="False"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode ="Standard"
EnableColumnVirtualization="False"
EnableRowVirtualization="False"
ScrollViewer.IsDeferredScrollingEnabled="True"
CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="True"
ItemsSource ="{Binding}" Block.TextAlignment="Center"
CanUserAddRows="False" CanUserDeleteRows="False" FrozenColumnCount="1"
GridLinesVisibility="None" FontFamily="Arial" FontSize="10" Background="White"
ScrollViewer.ScrollChanged="dtGridReads_ScrollChanged" >
还有XAML后面的代码。所以我不确定每件事都去了哪里,谁可以和谁沟通。
数据网格的事件是公共的,应该在数据网格之外使用,最有可能在承载它的Window或UserControl中使用:
In window(或除DataGrid类以外的任何类)
DataGrid dg = new DataGrid();
dg.ScrollChanged += DoSomething;
private void DoSomething(object sender, ScrollChangedEventArgs e)
{
if (e.HorizontalChange != 0)
{
// update some stuff to main XAML which should now be available
}
}
如果您想查看如何从XAML订阅事件,您可以使用:
<DataGrid ScrollChanged="DoSomething" />