|
<phone:PhoneApplicationPage
x:Class="DataBoundApp1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
d:DataContext="{d:DesignData SampleData/MainViewModelSampleData.xaml}"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<!--データ コンテキストが、上記のサンプル データに設定されます。また、LayoutRoot は、他のすべてのページ コンテンツが配置されるルート グリッドを格納します。-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel は、アプリケーション名とページ タイトルを格納します-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock
x:Name="ApplicationTitle"
Text="マイ アプリケーション"
Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock
x:Name="PageTitle"
Text="ページ名"
Margin="9,-7,0,0"
Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel は、ListBox および ListBox の ItemTemplate を格納します。追加コンテンツをここに入力します。-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox
x:Name="MainListBox"
Margin="0,0,-12,0"
ItemsSource="{Binding Items}"
SelectionChanged="MainListBox_SelectionChanged"
>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432" Height="78">
<TextBlock
Text="{Binding LineOne}"
TextWrapping="Wrap"
Style="{StaticResource PhoneTextExtraLargeStyle}"
/>
<TextBlock
Text="{Binding LineTwo}"
TextWrapping="Wrap"
Margin="12,-6,12,0"
Style="{StaticResource PhoneTextSubtleStyle}"
/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
|
|
<phone:PhoneApplicationPage
x:Class="DataBoundApp1.DetailsPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DataContext="{d:DesignData SampleData/MainViewModelSampleData.xaml}"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<!--データ コンテキストが、上記のサンプル データと下記のサンプル データ コレクション内の最初の項目に設定されます。また、LayoutRoot は、他のすべてのページ コンテンツが配置されるルート グリッドを格納します。-->
<Grid x:Name="LayoutRoot" Background="Transparent" d:DataContext="{Binding Items[0]}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel は、アプリケーション名とページ タイトルを格納します-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock
x:Name="PageTitle"
Text="マイ アプリケーション"
Style="{StaticResource PhoneTextNormalStyle}"
/>
<TextBlock
x:Name="ListTitle"
Text="{Binding LineOne}"
Margin="9,-7,0,0"
Style="{StaticResource PhoneTextTitle1Style}"
/>
</StackPanel>
<!--ContentPanel は、詳細テキストを格納します。追加コンテンツをここに入力します。-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock
x:Name="ContentText"
Text="{Binding Path=LineThree}"
TextWrapping="Wrap"
Style="{StaticResource PhoneTextNormalStyle}"
/>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
|
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
namespace DataBoundApp1
{
public partial class MainPage : PhoneApplicationPage
{
// コンストラクター
public MainPage()
{
InitializeComponent();
// ListBox コントロールのデータ コンテキストをサンプル データに設定します
DataContext = App.ViewModel;
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
// ListBox で変更された選択項目を処理します
private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// 選択されたインデックスが -1 の場合 (選択されていない場合) は何も行いません
if (MainListBox.SelectedIndex == -1)
return;
// 新しいページに移動します
NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItem=" + MainListBox.SelectedIndex, UriKind.Relative));
// 選択されたインデックスを -1 (選択されていない) にリセットします
MainListBox.SelectedIndex = -1;
}
// ViewModel Items のデータを読み込みます
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
}
}
|
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
namespace DataBoundApp1
{
public partial class DetailsPage : PhoneApplicationPage
{
// コンストラクター
public DetailsPage()
{
InitializeComponent();
}
// ページに移動するときに、リスト内の選択した項目にデータ コンテキストを設定します
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string selectedIndex = "";
if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))
{
int index = int.Parse(selectedIndex);
DataContext = App.ViewModel.Items[index];
}
}
}
}
|
|
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
namespace DataBoundApp1
{
public class MainViewModel : INotifyPropertyChanged
{
public MainViewModel()
{
this.Items = new ObservableCollection<ItemViewModel>();
}
/// <summary>
/// ItemViewModel オブジェクトのコレクションです。
/// </summary>
public ObservableCollection<ItemViewModel> Items { get; private set; }
private string _sampleProperty = "Sample Runtime プロパティ値";
/// <summary>
/// Sample ViewModel プロパティ。このプロパティは、バインドを使用してプロパティ値を表示するビューで使用されます。
/// </summary>
/// <returns></returns>
public string SampleProperty
{
get
{
return _sampleProperty;
}
set
{
if (value != _sampleProperty)
{
_sampleProperty = value;
NotifyPropertyChanged("SampleProperty");
}
}
}
public bool IsDataLoaded
{
get;
private set;
}
/// <summary>
/// いくつかの ItemViewModel オブジェクトを作成し、Items コレクションに追加します。
/// </summary>
public void LoadData()
{
// サンプル データ。実際のデータに置き換えます。
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 1", LineTwo = "Maecenas praesent accumsan bibendum", LineThree = "Facilisi faucibus habitant inceptos interdum lobortis nascetur pharetra placerat pulvinar sagittis senectus sociosqu" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 2", LineTwo = "Dictumst eleifend facilisi faucibus", LineThree = "Suscipit torquent ultrices vehicula volutpat maecenas praesent accumsan bibendum dictumst eleifend facilisi faucibus" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 3", LineTwo = "Habitant inceptos interdum lobortis", LineThree = "Habitant inceptos interdum lobortis nascetur pharetra placerat pulvinar sagittis senectus sociosqu suscipit torquent" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 4", LineTwo = "Nascetur pharetra placerat pulvinar", LineThree = "Ultrices vehicula volutpat maecenas praesent accumsan bibendum dictumst eleifend facilisi faucibus habitant inceptos" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 5", LineTwo = "Maecenas praesent accumsan bibendum", LineThree = "Maecenas praesent accumsan bibendum dictumst eleifend facilisi faucibus habitant inceptos interdum lobortis nascetur" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 6", LineTwo = "Dictumst eleifend facilisi faucibus", LineThree = "Pharetra placerat pulvinar sagittis senectus sociosqu suscipit torquent ultrices vehicula volutpat maecenas praesent" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 7", LineTwo = "Habitant inceptos interdum lobortis", LineThree = "Accumsan bibendum dictumst eleifend facilisi faucibus habitant inceptos interdum lobortis nascetur pharetra placerat" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 8", LineTwo = "Nascetur pharetra placerat pulvinar", LineThree = "Pulvinar sagittis senectus sociosqu suscipit torquent ultrices vehicula volutpat maecenas praesent accumsan bibendum" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 9", LineTwo = "Maecenas praesent accumsan bibendum", LineThree = "Facilisi faucibus habitant inceptos interdum lobortis nascetur pharetra placerat pulvinar sagittis senectus sociosqu" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 10", LineTwo = "Dictumst eleifend facilisi faucibus", LineThree = "Suscipit torquent ultrices vehicula volutpat maecenas praesent accumsan bibendum dictumst eleifend facilisi faucibus" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 11", LineTwo = "Habitant inceptos interdum lobortis", LineThree = "Habitant inceptos interdum lobortis nascetur pharetra placerat pulvinar sagittis senectus sociosqu suscipit torquent" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 12", LineTwo = "Nascetur pharetra placerat pulvinar", LineThree = "Ultrices vehicula volutpat maecenas praesent accumsan bibendum dictumst eleifend facilisi faucibus habitant inceptos" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 13", LineTwo = "Maecenas praesent accumsan bibendum", LineThree = "Maecenas praesent accumsan bibendum dictumst eleifend facilisi faucibus habitant inceptos interdum lobortis nascetur" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 14", LineTwo = "Dictumst eleifend facilisi faucibus", LineThree = "Pharetra placerat pulvinar sagittis senectus sociosqu suscipit torquent ultrices vehicula volutpat maecenas praesent" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 15", LineTwo = "Habitant inceptos interdum lobortis", LineThree = "Accumsan bibendum dictumst eleifend facilisi faucibus habitant inceptos interdum lobortis nascetur pharetra placerat" });
this.Items.Add(new ItemViewModel() { LineOne = "ランタイム 16", LineTwo = "Nascetur pharetra placerat pulvinar", LineThree = "Pulvinar sagittis senectus sociosqu suscipit torquent ultrices vehicula volutpat maecenas praesent accumsan bibendum" });
this.IsDataLoaded = true;
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
|
|
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace DataBoundApp1
{
public class ItemViewModel : INotifyPropertyChanged
{
private string _lineOne;
/// <summary>
/// Sample ViewModel プロパティ。このプロパティは、バインドを使用してプロパティ値を表示するビューで使用されます。
/// </summary>
/// <returns></returns>
public string LineOne
{
get
{
return _lineOne;
}
set
{
if (value != _lineOne)
{
_lineOne = value;
NotifyPropertyChanged("LineOne");
}
}
}
private string _lineTwo;
/// <summary>
/// Sample ViewModel プロパティ。このプロパティは、バインドを使用してプロパティ値を表示するビューで使用されます。
/// </summary>
/// <returns></returns>
public string LineTwo
{
get
{
return _lineTwo;
}
set
{
if (value != _lineTwo)
{
_lineTwo = value;
NotifyPropertyChanged("LineTwo");
}
}
}
private string _lineThree;
/// <summary>
/// Sample ViewModel プロパティ。このプロパティは、バインドを使用してプロパティ値を表示するビューで使用されます。
/// </summary>
/// <returns></returns>
public string LineThree
{
get
{
return _lineThree;
}
set
{
if (value != _lineThree)
{
_lineThree = value;
NotifyPropertyChanged("LineThree");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
|
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
namespace DataBoundApp1
{
public partial class App : Application
{
private static MainViewModel viewModel = null;
/// <summary>
/// バインドするビューで使用される静的 ViewModel です。
/// </summary>
/// <returns>MainViewModel オブジェクトです。</returns>
public static MainViewModel ViewModel
{
get
{
// 必要になるまでビュー モデルの作成を延期します
if (viewModel == null)
viewModel = new MainViewModel();
return viewModel;
}
}
/// <summary>
/// Phone アプリケーションのルート フレームへの容易なアクセスを提供します。
/// </summary>
/// <returns>Phone アプリケーションのルート フレームです。</returns>
public PhoneApplicationFrame RootFrame { get; private set; }
/// <summary>
/// Application オブジェクトのコンストラクターです。
/// </summary>
public App()
{
// キャッチできない例外のグローバル ハンドラーです。
UnhandledException += Application_UnhandledException;
// Silverlight の標準初期化
InitializeComponent();
// Phone 固有の初期化
InitializePhoneApplication();
// デバッグ中にグラフィックスのプロファイル情報を表示します。
if (System.Diagnostics.Debugger.IsAttached)
{
// 現在のフレーム レート カウンターを表示します。
Application.Current.Host.Settings.EnableFrameRateCounter = true;
// 各フレームで再描画されているアプリケーションの領域を表示します。
//Application.Current.Host.Settings.EnableRedrawRegions = true;
// 試験的な分析視覚化モードを有効にします。
// これにより、色付きのオーバーレイを使用して、GPU に渡されるページの領域が表示されます。
//Application.Current.Host.Settings.EnableCacheVisualization = true;
// アプリケーションの PhoneApplicationService オブジェクトの UserIdleDetectionMode プロパティを Disabled に設定して、
// アプリケーションのアイドル状態の検出を無効にします。
// 注意: これはデバッグ モードのみで使用してください。ユーザーが電話を使用していないときに、ユーザーのアイドル状態の検出を無効にする
// アプリケーションが引き続き実行され、バッテリ電源が消耗します。
PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
}
}
// (たとえば、[スタート] メニューから) アプリケーションが起動するときに実行されるコード
// このコードは、アプリケーションが再アクティブ化済みの場合には実行されません
private void Application_Launching(object sender, LaunchingEventArgs e)
{
}
// アプリケーションがアクティブになった (前面に表示された) ときに実行されるコード
// このコードは、アプリケーションの初回起動時には実行されません
private void Application_Activated(object sender, ActivatedEventArgs e)
{
// アプリケーションの状態が適切に復元されたことを確認します
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
// アプリケーションが非アクティブになった (バックグラウンドに送信された) ときに実行されるコード
// このコードは、アプリケーションの終了時には実行されません
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
// 必要なアプリケーションの状態が持続していることをここで確認します。
}
// (たとえば、ユーザーが戻るボタンを押して) アプリケーションが終了するときに実行されるコード
// このコードは、アプリケーションが非アクティブになっているときには実行されません
private void Application_Closing(object sender, ClosingEventArgs e)
{
}
// ナビゲーションに失敗した場合に実行されるコード
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
{
if (System.Diagnostics.Debugger.IsAttached)
{
// ナビゲーションに失敗しました。デバッガーで中断します。
System.Diagnostics.Debugger.Break();
}
}
// ハンドルされない例外の発生時に実行されるコード
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
if (System.Diagnostics.Debugger.IsAttached)
{
// ハンドルされない例外が発生しました。デバッガーで中断します。
System.Diagnostics.Debugger.Break();
}
}
#region Phone アプリケーションの初期化
// 初期化の重複を回避します
private bool phoneApplicationInitialized = false;
// このメソッドに新たなコードを追加しないでください
private void InitializePhoneApplication()
{
if (phoneApplicationInitialized)
return;
// フレームを作成しますが、まだ RootVisual に設定しないでください。これによって、アプリケーションがレンダリングできる状態になるまで、
// スプラッシュ スクリーンをアクティブなままにすることができます。
RootFrame = new PhoneApplicationFrame();
RootFrame.Navigated += CompleteInitializePhoneApplication;
// ナビゲーション エラーを処理します
RootFrame.NavigationFailed += RootFrame_NavigationFailed;
// 再初期化しないようにします
phoneApplicationInitialized = true;
}
// このメソッドに新たなコードを追加しないでください
private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
{
// ルート visual を設定してアプリケーションをレンダリングできるようにします
if (RootVisual != RootFrame)
RootVisual = RootFrame;
// このハンドラーは必要なくなったため、削除します
RootFrame.Navigated -= CompleteInitializePhoneApplication;
}
#endregion
}
}
|
|