Проблемы с отправкой события другому классу в C # / WPF - PullRequest
0 голосов
/ 17 сентября 2011

Я относительно новичок в 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. Поэтому я не уверен, куда все идет и кто с кем может общаться.

1 Ответ

0 голосов
/ 17 сентября 2011

Событие сетки данных является общедоступным и должно использоваться вне сетки данных, скорее всего, в 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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...