【问题标题】:Do not add a event click不添加事件点击
【发布时间】:2023-03-15 18:44:01
【问题描述】:

添加 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" />

【问题讨论】:

  • 你能发布 NullReferenceException 的堆栈跟踪吗?
  • "对象引用未设置为对象的实例。" - 这是我从俄语到英语的翻译。

标签: wpf xaml binding datatemplate


【解决方案1】:

您的点击事件应该受到保护或公开。 XAML 和后面的代码是部分类,因此如果单击事件在另一个部分类中定义并声明为私有,则 XAML 无法访问单击事件

【讨论】:

  • 不,事件有效,因为我找到了一个属性 x: Class = namespace class class 事件所在的位置。正如他当时在编译时发誓的那样
【解决方案2】:

我也经历过同样的事情。最后,我有一个过时的不兼容版本的 .NET Framework,仅此而已。从 .NET 4.0 更新到 4.5.1 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2018-12-16
    • 2023-03-17
    • 1970-01-01
    • 2019-02-11
    相关资源
    最近更新 更多