Как прикрепить объект к событию в C # /. NET? - PullRequest
0 голосов
/ 27 октября 2010

Я определил следующий DataTemplate для LibraryContainer:

<DataTemplate x:Key="ContainerItemTemplate">
            <Grid>
                <Border BorderThickness="1" BorderBrush="White" Margin="3">
                    <s:SurfaceTextBox IsReadOnly="True" Width="120" Text="{Binding Path=name}" Padding="3"/>
                </Border>
                <s:SurfaceButton Content="Expand" Click="SourceFilePressed"></s:SurfaceButton>
            </Grid>
        </DataTemplate>

SourceFilePressed является следующим:

 private void SourceFilePressed(object sender, RoutedEventArgs e)
        {
            Logging.Logger.getInstance().log(sender.ToString());
            e.Handled = true;
        }

В методе SourceFilePressed я могу получить объект, связанный с SurfaceTextBox, который находится в той же сетке, что и нажатая кнопка? Можно ли как-нибудь в DataTemplate прикрепить этот объект к Click-Event?

1 Ответ

1 голос
/ 27 октября 2010

Если я правильно проанализировал ваш вопрос, думаю, вы могли бы сделать это:

private void SourceFilePressed(object sender, RoutedEventArgs e)
{
    var obj = (sender as FrameworkElement).DataContext;
}

Чтобы объяснить: отправитель является источником события, поэтому это SurfaceButton.Это FrameworkElement и, следовательно, имеет свойство DataContext.DataContext является унаследованным свойством, поэтому, если вы не укажете его явно для SurfaceButton, он будет наследовать DataContext от своего родителя (Grid).DataTemplate s DataContext - это элемент данных, который он шаблонизирует, поэтому вы можете видеть, что SurfaceButton будет иметь тот же объект, что и его DataContext.

...