新しいWindows Phoneプロジェクトを作成し、Windows Phoneデータバインドテンプレートを使用すると、ほとんどの作業が完了します。
あなたのアプリのすべてのデータを含むViewModelを設定します。 IsolatedStorageを使用してこのデータをシリアライズおよびデシリアライズして、アプリケーションセッション間およびトゥームストーン時に保存することができます。
テンプレートには、MailViewModelとItemViewModelがあります。 MainViewModelには、アプリケーションに必要なすべてのデータ(ItemViewModelのObservableCollectionなど)が格納され、ItemViewModelにはアプリケーションの個々のデータ型が格納されます。
DetailsPage.xamlページでは、各テキストボックスをApp.MainViewModelアイテムにデータバインドする必要があります。ユーザーがDetailsPage.xamlのデータを操作するとすぐにViewModelを更新するには、バインディングをTwoWayに設定します。必要に応じてバインディングをOneWayに設定し、変更をViewModelに書き込んでIsolatedStorageに保存するOKボタンを使用することができます。この場合
<TextBlock x:Name="ListTitle" Text="{Binding LineOne}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
LineOneはItemViewModelにおける財産であり、ユーザーがメインページから項目を選択したときにページがクエリ文字列からこのデータを取得します。ここでは
は様結合ルックスは何の例です。 .xaml。ページのDataContextは、データバインドされた情報がどこから来るかを決定します。
ここでは、MainPageが選択した項目をViewModelからDetailsPageに渡すスニペットを示します。
// Handle selection changed on ListBox
private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// If selected index is -1 (no selection) do nothing
if (MainListBox.SelectedIndex == -1)
return;
// Navigate to the new page
NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItem=" + MainListBox.SelectedIndex, UriKind.Relative));
// Reset selected index to -1 (no selection)
MainListBox.SelectedIndex = -1;
}
ここでは、DetailsPageが選択した項目を取得する方法を示します。
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];
}
}
上記のデフォルトテンプレートを使用して周りを再生し、追加の質問をしてください。
データバインディングとObservableCollectionの美しさは、データを更新するだけで、UXはこれらの変更を即座に反映することができます。これは、データの変更によりイベントが発生するためです。
public string LineOne
{
get
{
return _lineOne;
}
set
{
if (value != _lineOne)
{
_lineOne = value;
NotifyPropertyChanged("LineOne");
}
}
}
NotifyPropertyChanged()は、この情報をViewにブロードキャストします。
MVCとWP7を使用してこのようなことを行う方法については、本当に簡単な例がありますか? – webdad3
私は本当に簡単な例はありませんが、 "データバインドされたアプリケーション"テンプレートを始めて、それがどのように機能するか見るまで、私はちょうどそれを覗きました。 –
これは(それがASPでありますけれども、それは実際にMVCについて非常によくデモ)あなたを助けるかもしれないhttp://agilewarrior.wordpress.com/2010/09/18/silverlight-model-view-controller-mvc-example/ –