WM8.1: Unterschied zwischen den Versionen

Aus Alexander's Wiki
Zeile 74: Zeile 74:
protected async override void OnLaunched(LaunchActivatedEventArgs e)
protected async override void OnLaunched(LaunchActivatedEventArgs e)
{
{
 
  //
  // Instantiate DAOs
  //
  ITechLogDao tlDao = new TechLogDummyDao();
  App.Current.Resources["techLogDao"] = tlDao;
  ...
}
}
</source>
</source>

Version vom 20. April 2015, 14:15 Uhr

XAML

Die XAML-Datei beschreibt die Oberfläche(n) der Anwendung, z.B. MyView.xaml. Dazu gehört eine eine Klasse, die die Logik implementiert, z.B.: MyView.xaml.cs. Die Zuordnung erfolgt über die XAML-Datei:

<Page
    ...
    x:Class="TechLog.MyView"
    ...

Um auf ein Steuerelement aus der Klasse zugreifen zu können, benötigt es einen Namen. Außerdem kann ein Event ausgelöst werden, falls es ausgewählt wird. Dies geschieht wie folgt:

<Element
    ...
    x:Name="myName"
    SelectionChanged="ListView_SelectionChanged"
    ...
</Element>

In der zugehörigen Klasse kann man darauf beispielsweise so reagieren:

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   List<String> itemsList = new List<string>();
   itemsList.Add("Item 4");
   itemsList.Add("Item 5");

   myName.ItemsSource = itemsList;
}

Buttons

Dem Button muss ein Handler zugeordnet werden damit beim Klick etwas geschieht:

<Button ... 
  Click="CalculateHandler">
</Button>

In der Klasse wird dann die folgende Methode aufgerufen:

private void CalculateHandler(object sender, RoutedEventArgs e)
{
   ...
}

Button drehen

<Button ... 
    RenderTransformOrigin="0.5,0.5" 
    Style="{StaticResource NavigationBackButtonNormalStyle}">
               
  <UIElement.RenderTransform>
    <RotateTransform CenterX="0.5" CenterY="0.5" Angle="180" />
  </UIElement.RenderTransform>
</Button>

Bild anstelle des Icons

<Button Style="{StaticResource NavigationBackButtonNormalStyle}">
   <Button.Template>
       <ControlTemplate>
           <Image Source="Assets/download-2-45.png" />
       </ControlTemplate>
   </Button.Template>
</Button>

Model

App.xaml.cs

protected async override void OnLaunched(LaunchActivatedEventArgs e)
{
   //
   // Instantiate DAOs
   //
   ITechLogDao tlDao = new TechLogDummyDao();
   App.Current.Resources["techLogDao"] = tlDao;
   ...
}

Binding

In der Model-Klasse (*.cs)

public class MyClass : IItem, INotifyPropertyChanged
{
   public event PropertyChangedEventHandler PropertyChanged;

   public void NotifyPropertyChanged(string propertyName)
   {
      if (PropertyChanged != null)
      {
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
      }
   }

   ...

   private Int32 _MyVariable;

   public Int32 MyMethode
   {
     get { return _MyVariable; }
     set { _MyVariable = value; NotifyPropertyChanged("MyMethode"); }
   }

...
}

In der Controller Klasse (*.xaml.cs)

private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
   MenuItemDataSource menuItemDataSource = (MenuItemDataSource)App.Current.Resources["menuItemDataSource"];
   menuItemDataSource.Refresh();
   if (menuItemDataSource != null)
   {
     this.DefaultViewModel["Items"] = menuItemDataSource.MenuItems;
   }
}

In der View (*.xaml)

    <Page.Resources>
        <!-- Collection of items displayed by this page -->
        <CollectionViewSource x:Name="itemsViewSource" Source="{Binding Items}"/>
        ...
    </Page.Resources>