Zdravím, dal jsem se na vývoj WP aplikací a dost se peru s pro mě novým C#. Mám nějaký takový kód:
namespace IngressClone {
public partial class MainPage : PhoneApplicationPage {
struct PortalData{
int id;
//...
void setupId(int nid){
id = nid;
}
};
//...
const string NICK = "doomista";
//...
double UserLat=74.0064, UserLon=40.7142;
static PortalData portalInfo;
/* CONSTRUCTOR */
public MainPage() {
InitializeComponent();
//...
}
public static void ProcessPortalInfo(string[] data){
portalInfo.fillData(data[0],data[1],Int32.Parse(data[2]),Int32.Parse(data[3]));
}
private static void DownloadPortalInfoCallback(Object sender, DownloadStringCompletedEventArgs e){
string down = e.Result.ToString();
ProcessPortalInfo(down.Split(' '));
}
public static void DownloadPortalInfo(Uri url){
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler (DownloadPortalInfoCallback);
client.DownloadStringAsync (url);
}
private void Button_UpdateLocation(object sender, RoutedEventArgs e) {
/* Get Location */
GeoCoordinateWatcher gwatcher = new GeoCoordinateWatcher();
var PositionNow = gwatcher.Position;
if (!PositionNow.Location.IsUnknown){
UserLat = PositionNow.Location.Latitude;
UserLon = PositionNow.Location.Longitude;
}
//...
//volání stahování
//...
portalName.Text = portalNames[ptr]; // změna TextBlocku aplikace
}
}
}
Funkce Button_UpdateLocation je volána aplikací, když stisknu tlačítko. Tahle funkce má přístup ke všem assetům aplikace, takže zde můžu měnit třeba nápisy v TextBoxech. Zároveň mám přístup ke všem konstantám i proměnným definovaným v ukázce. Jedinou výjimkou jsou proměnné uvnitř objektu struktury, k těm se dostanu leda tak, že si napíšu metodu struktury, která s nimi bude manipulovat. Nechápu, proč mě to nutí dělat takovou zbytečnost, kdybych tohle chtěl, tak si udělám class, ale proteď ten problém neřeším, jakkoli je na stránkách m$ avizované, že struktury mají fungovat jako custom datové typy.
Opravdový problém nastává, když si chci stáhnout zdrojový kód webové stránky a použít ho v aplikaci pro změnu textboxů a uložení ve struktuře.
Podle dokumentace microsoftu jsem dal dohromady jakýs takýs kód včetně callbacku, s nímž jsem doposud nikdy nepracoval, ale chápu, k čemu je. Morální problém mám se slůvkem static, které pro mě v praxi znamená, že funkce ztrácí přístup k assetům aplikace a ke všem proměnným, které nejsou deklarovány jako static. Paradoxně k non-static konstantám (za předpokladu, že const není nějakým způsobem podmnožinou static) přístup mám stále. Ze stejného důvodu ale z této funkce nemůžu ani volat žádnou non-static funkci, která by k těmto prvkům přístup měla.
Může mi tohle prosím někdo vysvětlit a poradit, jak si s tím poradit? Hatmatilku na m$ stránkách totiž fakt nepobírám. Díky moc předem