Не добавлять событие нажмите - PullRequest
0 голосов
/ 19 октября 2010

При добавлении события Click возникает исключение System.NullReferenceException.

<ListBox DockPanel.Dock="Top" DataContext="{Binding idPerson, Converter={StaticResource ConvertTrainersFromClientsKey}}" ItemsSource="{Binding}" >
 <ListBox.ItemTemplate>
  <DataTemplate>
   <DockPanel>
    <Button Content="{Binding name_trainer}" Tag="{Binding idPersonTrainer}" DockPanel.Dock="Top" Click="Button_Click"/>//this Button_Click
    <DockPanel>
     <TextBlock Text="Окончание заявки: "/>
     <TextBox DockPanel.Dock="Top" Style="{StaticResource TextBoxIsReadOnly}" Text="{Binding date_payment}"/>
    </DockPanel>
   </DockPanel>
  </DataTemplate>
 </ListBox.ItemTemplate>
</ListBox>

без события все отлично работает

код события:

private void Button_Click(object sender, RoutedEventArgs e)
{
}

редактирование:

полный код, в котором событие в другом элементе хорошо работает.

<ListView DockPanel.Dock="Top" Grid.Row="0" x:Name="datagrid" Loaded="datagrid_Loaded" ItemsSource="{Binding Client}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <DockPanel LastChildFill="False">
                <Border Margin="10" Width="100" BorderThickness="3" BorderBrush="LightBlue" CornerRadius="2"  >
                    <DockPanel>
                        <Image Source="{Binding photo, Converter={StaticResource ConvertNullImageKey}}"/>
                    </DockPanel>
                </Border>
                <DockPanel Margin="10" Width="{Binding BindingGroupName=dockwidth}">
                    <TextBox DockPanel.Dock="Top" Style="{StaticResource TextBoxIsReadOnly}" Text="{Binding name_client}"/>
                    <Label Content="Сопровождающий" DockPanel.Dock="Top"/>
                    <ListBox DockPanel.Dock="Top" x:Name="listbox" DataContext="{Binding idPerson, Converter={StaticResource ConvertTrainersFromClientsKey}}" ItemsSource="{Binding}" >
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <DockPanel>
                                    <Button Content="{Binding name_trainer}" Tag="{Binding idPersonTrainer}" DockPanel.Dock="Top" />
                                    <DockPanel>
                                        <TextBlock Text="Окончание заявки: "/>
                                        <TextBox DockPanel.Dock="Top" Style="{StaticResource TextBoxIsReadOnly}" Text="{Binding date_payment}"/>
                                    </DockPanel>

                                </DockPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                    <Label DockPanel.Dock="Top" Content="Нету" Visibility="{Binding ElementName=listbox, Converter={StaticResource ConvertTrainersFromClientsVisibilityKey}}"/>
                </DockPanel>
                <Grid Margin="10">
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="Дата рождения" Grid.Column="0" Grid.Row="0" Margin="5"/>
                    <TextBlock Text="Адрес" Grid.Column="0" Grid.Row="1" Margin="5"/>
                    <TextBlock Text="Телефон" Grid.Column="0" Grid.Row="2" Margin="5"/>
                    <TextBlock Text="Email" Grid.Column="0" Grid.Row="3" Margin="5"/>
                    <TextBlock Text="Партнер" Grid.Column="0" Grid.Row="4" Margin="5"/>
                    <TextBox Text="{Binding date_reg}" Grid.Column="1" Grid.Row="0"  Margin="5"/>
                    <TextBox Text="{Binding address}" Grid.Column="1" Grid.Row="1"  Margin="5"/>
                    <TextBox Text="{Binding phone}" Grid.Column="1" Grid.Row="2"  Margin="5"/>
                    <TextBox Text="{Binding mail}" Grid.Column="1" Grid.Row="3" Margin="5"/>
                    <Button Content="{Binding namePartner}" Click="Button_Click_1" Grid.Column="1" Grid.Row="4" Margin="5"/>
                </Grid>
                <DockPanel LastChildFill="False"  Margin="10">
                    <Button Content="Редактировать" DockPanel.Dock="Top" Margin="10" x:Name="p_editStudent" Click="p_editStudent_Click"  VerticalAlignment="Center" />
                    <Button Tag="{Binding idPerson}" Content="Переписка" Margin="10" x:Name="p_allMessages" Click="p_allMessages_Click" DockPanel.Dock="Top" VerticalAlignment="Center" />
                    <Button Content="Написать письмо" Margin="10" x:Name="p_sendMessageForStudent" Click="p_sendMessageForStudent_Click" DockPanel.Dock="Top" VerticalAlignment="Center" />
                </DockPanel>
            </DockPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

это работа

<Button Content="{Binding namePartner}" Click="Button_Click_1" Grid.Column="1" Grid.Row="4" Margin="5"/>

клик не работает

<Button Content="{Binding name_trainer}" Tag="{Binding idPersonTrainer}" Click="Button_Click" DockPanel.Dock="Top" />

Ответы [ 2 ]

0 голосов
/ 07 мая 2014

Я испытал то же самое.В итоге у меня была устаревшая несовместимая версия .NET Framework, вот и все.Обновление с .NET 4.0 до 4.5.1 решило проблему.

0 голосов
/ 19 октября 2010

Ваше событие клика должно быть защищено или открыто. XAML и код позади являются частичными классами, поэтому XAML не может получить доступ к событию click, если оно определено в другом частичном классе и объявлено как private

...