在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后面的代码。所以我不确定每件事都去了哪里,谁可以和谁沟通。

在c# /WPF中向另一个类发送事件时遇到问题

数据网格的事件是公共的,应该在数据网格之外使用,最有可能在承载它的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" />