所以此刻我的页面目前正在我的cs文件中使用以下代码。我需要改变的是添加一个事件处理程序,以便当单击按钮时,MainPage_Loaded仅在单击此按钮后发生。
我明白
这行this.Loaded += new RoutedEventHandler(MainPage_Loaded);
当前正在调用此方法来启动,但当我尝试将此代码放入button1_click事件处理程序时,它不起作用。
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
public void button1_Click(object sender, RoutedEventArgs e)
{
}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var ctx = new HazchemEntities(new Uri("http://devweb.compsci.chester.ac.uk/0808092/CO6009/HazchemService.svc/"));
App.coll = new DataServiceCollection<tblChemical>(ctx);
Lst.ItemsSource = App.coll;
App.coll.LoadCompleted += new EventHandler<LoadCompletedEventArgs>(coll_LoadCompleted);
var qry = "/tblChemicals?$filter UNNumber = eq'" + Search.Text + "'";
App.coll.LoadAsync(new Uri(qry, UriKind.Relative));
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
这是我正在使用的XAML代码。
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
<TextBox x:Name="Search" Height="72" Margin="-4,0,50,0" Text="TextBox" VerticalAlignment="Top" Width="350" HorizontalAlignment="Left"/>
<Button Content="Go" Height="72" HorizontalAlignment="Left" Margin="350,0,0,0" Name="button1" VerticalAlignment="Top" Width="100" Click="button1_Click" />
</StackPanel>
我需要把什么放在button1_Click事件,使它启动mainpage_loaded只有当这个按钮被点击?
谢谢
你似乎误解了什么…这一行:
。加载+= new RoutedEventHandler(MainPage_Loaded);
不是导致立即调用void MainPage_Loaded(object sender, RoutedEventArgs e)
函数。它正在为该事件注册一个处理程序-当MainPage完成加载时,它会在内部触发Loaded事件,然后调用事件处理程序。
在button1_Click
中设置该处理程序也没有意义-您的页面在点击按钮时已经很好地加载了。
如果您在MainPage_Loaded
函数中有一些功能,您希望button1_Click
也使用,那么您应该将其重构为它们都可以调用的单独函数。
你将EventHandler分配给MainPage Loaded事件而不是按钮点击。
在构造函数中,尝试this.button1.OnClick += new RoutedEventHandler(MainPage_Loaded);
添加以下代码到button1_Click
MainPage_Loaded(sender,e);