2012-03-09 4 views
0

Я новичок в Silverlight и работаю с Simple MVVM для создания обучающего приложения. Простой автор MVVM предоставляет несколько хороших примеров привязки данных списка/подробностей, но я ищу пример экрана для регистрации пользователя. Поскольку это внутреннее приложение, я могу передать идентификатор Windows с веб-сайта хостинга и проверить его на базе пользовательской базы данных. Если идентификатор пользователя не существует, я хотел бы показать регистрацию, где пользователь может ввести свое имя/фамилию и нажать кнопку «зарегистрироваться», чтобы сохранить новую запись пользователя. Похоже на простой образец, но я не смог понять это.Простой MVVM - Ищите пример страницы регистрации пользователя

ответ

0

Ну, мне удалось совместить несколько разных примеров и придумать пример, который работает. Это часть учебного приложения, которое я создаю. Это позволяет пользователям (в моем ИТ-отделе) предлагать и голосовать за обеденное время. Для этого приложения ужин является пользователем. В приведенном ниже коде будет отображаться экран с идентификатором Windows пользователя (только для чтения) и входы для имени/имени в дополнение к кнопке «register».

XAML (registerdinerview.xaml):

<navigation:Page x:Class="LTDestination.Views.RegisterDinerView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      mc:Ignorable="d" 
      xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
      xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 
      d:DesignWidth="640" 
      d:DesignHeight="480" 
      Title="RegisterDinerView Page" 
      DataContext="{Binding Source={StaticResource Locator}, Path=RegisterDinerViewModel}" 
      > 
<navigation:Page.Resources> 
    <Style TargetType="Button"> 
     <Style.Setters> 
      <Setter Property="Height" Value="23"/> 
      <Setter Property="Width" Value="60"/> 
      <Setter Property="Margin" Value="5,0,0,0"/> 
     </Style.Setters> 
    </Style> 
</navigation:Page.Resources> 
<StackPanel x:Name="LayoutRoot"> 
    <StackPanel x:Name="ContentStackPanel"> 
     <TextBlock x:Name="HeaderText" Style="{StaticResource HeaderTextStyle}" Text="New User Registration"/> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
       <RowDefinition/> 
       <RowDefinition/> 
       <RowDefinition/> 
      </Grid.RowDefinitions> 
      <sdk:Label Content="User Id:" Grid.Row="0" /> 
      <TextBlock Grid.Row="0" Grid.Column="1" Height="30" Text="{Binding Path=Model.UserId}" /> 
      <sdk:Label Content="First Name:" Grid.Row="1" /> 
      <TextBox Grid.Row="1" Grid.Column="1" Height="30" Text="{Binding Path=Model.FirstName, Mode=TwoWay}" /> 
      <sdk:Label Content="Last Name:" Grid.Row="2" /> 
      <TextBox Grid.Row="2" Grid.Column="1" Height="30" Text="{Binding Path=Model.LastName, Mode=TwoWay}" /> 
      <Button x:Name="RegisterButton" Content="Register" Click="registerButton_Click" 
         Grid.Row="3" Grid.Column="1" Height="23" Width="75" HorizontalAlignment="Left" Margin="5,0,0,0"/> 
     </Grid> 
    </StackPanel> 
</StackPanel> 

View Code (за registerdinerview.xaml.cs):

namespace LTDestination.Views 
{ 
    public partial class RegisterDinerView : Page 
    { 

     RegisterDinerViewModel _ViewModel; 

     public RegisterDinerView() 
     { 
      InitializeComponent(); 
      _ViewModel = (RegisterDinerViewModel)DataContext; 
      _ViewModel.NewDiner(); 
     } 

     private void registerButton_Click(object sender, RoutedEventArgs e) 
     { 
      _ViewModel.SaveChanges(); 
     } 

     // Executes when the user navigates to this page. 
     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
     } 

    } 
} 

ViewModel:

using System; 

using System.Collections.Generic;

// Пространство имен инструментальных средств с использованием агентства. Услуги; с использованием LTDestination.Web; с использованием SimpleMvvmToolkit;

пространств имен LTDestination.ViewModels { /// /// Этот класс расширяет ViewModelDetailBase, который реализует IEditableDataObject. /// /// Тип редактируемого типа DetailType как аргумент второго типа /// и как параметр для seccond ctor. /// /// /// Использовать фрагмент mvvmprop, чтобы добавить свойства привязки к этой ViewModel. /// /// общественный класс RegisterDinerViewModel: ViewModelDetailBase { #region Инициализация и очистка

private IDinerServiceAgent serviceAgent; 

    public RegisterDinerViewModel() 
    { 
    } 

    public RegisterDinerViewModel(IDinerServiceAgent serviceAgent) 
    { 
     this.serviceAgent = serviceAgent; 
    } 

    #endregion 

    #region Notifications 

    public event EventHandler<NotificationEventArgs<Exception>> ErrorNotice; 

    #endregion 

    #region Properties 

    private bool _IsBusy; 
    public bool IsBusy 
    { 
     get { return _IsBusy; } 
     set 
     { 
      _IsBusy = value; 
      NotifyPropertyChanged(m => m.IsBusy); 
     } 
    } 

    #endregion 

    #region Methods 

    public void NewDiner() 
    { 
     serviceAgent.GetDiners(DinersLoaded); 
    } 

    public void SaveChanges() 
    { 
     serviceAgent.AddDiner(base.Model); 
     serviceAgent.SaveChanges(DinerSaved); 
     IsBusy = true; 
    } 

    #endregion 

    #region Completion Callbacks 

    private void DinersLoaded(List<Diner> entities, Exception error) 
    { 
     // If no error is returned, set the model to entities 
     if (error == null) 
     { 
      base.Model = new Diner { UserId = App.UserId, Active = true }; 
     } 
     // Otherwise notify view that there's an error 
     else 
     { 
      NotifyError("Unable to retrieve items", error); 
     } 

     // We're done 
     IsBusy = false; 
    } 

    private void DinerSaved(Exception error) 
    { 
     if (error != null) 
     { 
      NotifyError("Unable to save diner", error); 
     } 
     else 
     { 
      MessageBus.Default.Notify(MessageTokens.Navigation, this, new NotificationEventArgs(PageNames.Home)); 
     } 
    } 

    #endregion 

    #region Helpers 

    // Helper method to notify View of an error 
    private void NotifyError(string message, Exception error) 
    { 
     // Notify view of an error 
     Notify(ErrorNotice, new NotificationEventArgs<Exception>(message, error)); 
    } 

    #endregion 
} 

}

Смежные вопросы