无法将事件发送到C#/ WPF中的另一个类

时间:2011-09-16 23:08:38

标签: c# wpf

我对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后面有代码,我需要在更改滚动时对其他对象进行更新。但是,我遇到的问题是我有另一个SampleControl的XAML,它是:

<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背后也有代码隐藏。所以我不确定一切都在哪里以及谁可以与谁沟通。

1 个答案:

答案 0 :(得分:0)

datagrid的事件是公共的,应该在数据网格之外使用,很可能在托管它的Window或UserControl中使用:

在窗口(或任何类其他而不是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" />