Escolar Documentos
Profissional Documentos
Cultura Documentos
1
1 Criação do Modelo “Models”
O modelo nada mais é do que uma entidade comercial e atua como uma camada para
transmitir dados ao banco de dados/qualquer fonte de dados. É completamente independente
da interface do usuário.
namespace WindowsApp
{
public class MemberDetail : INotifyPropertyChanged
{
private string _firstName;
2
2 Criação da Base do Modelo de Exibição “ViewModelBase”
É a melhor abordagem ter “ViewModelBase” como classe base para todos os
ViewModels herdando-o. Para que os métodos comuns a todos os ViewModels estejam
presentes nesta Classe Base.
namespace WindowsApp.ViewModel
{
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
• A Propriedade que contém os dados deve ser marcada como “Pública” para
expor e vinculá-la à visualização.
• Ele também herda “ViewModelBase” para notificar sempre que os valores da
propriedade forem alterados. Para fazer isso, o evento “PropertyChanged”
deve ser chamado sempre que definir um valor para uma propriedade.
namespace WindowsApp.ViewModel
{
public class MemberDetailUserControlViewModel : ViewModelBase
{
public ICommand AddNewMemberCommand { get; set; }
public ObservableCollection<MemberDetail> MemberDetailList { get; set; }
public MemberDetailUserControlViewModel()
{
BindCommand();
3
private void BindCommand()
{
try
{
AddNewMemberCommand = new RelayCommand(AddNewMemberDetail);
}
catch (Exception)
{
throw;
}
}
MemberDetailList.Add(new MemberDetail()
{
FirstName = FirstName,
LastName = LastName
});
FirstName = "";
LastName = "";
}
catch (Exception)
{
throw;
}
}
4
OnPropertyChanged("LastName");
}
}
}
}
Aqui criei uma classe personalizada chamada “RelayCommand” para invocar um evento
presente no “ViewModel” sempre que o comando for acionado a partir da exibição. Basicamente,
os limites de “Comandos” como dados para vinculações de entrada, botão e caixa de
seleção/botões de opção.
namespace WindowsApp.Helper
{
public class RelayCommand : ICommand
{
private readonly Action<object> _execute;
private readonly Predicate<object> _canExecute;
_execute = execute;
_canExecute = canExecute;
}
}
}
5
5 Criação da Exibição “Views”
5.1 Criação de Controle de Usuário (XAML) “UserControl”
5.1.1 MemberDetailUserControl.xaml
<UserControl x:Class="WindowsApp.UserControl.MemberDetailUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="372" d:DesignWidth="658">
<Grid>
<Grid.RowDefinitions>
<RowDefinition x:Uid="ColumnDefinition_1" Height="Auto" />
<RowDefinition x:Uid="ColumnDefinition_2" Height="Auto" />
<RowDefinition x:Uid="ColumnDefinition_3" Height="Auto" />
<RowDefinition Height="103*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition x:Uid="ColumnDefinition_1" Height="Auto" />
<RowDefinition x:Uid="ColumnDefinition_2" Height="Auto" />
<RowDefinition x:Uid="ColumnDefinition_3" Height="Auto" />
</Grid.RowDefinitions>
<Label Content="FirstName" Height="28" HorizontalAlignment="Left" Margin="10,11,0,0" Name="
LblName" VerticalAlignment="Top" ClipToBounds="False" FontWeight="Bold" />
<Label Content="LastName" Height="28" HorizontalAlignment="Left" Margin="11,40,0,0" Name="
LblPassword" VerticalAlignment="Top" ClipToBounds="False" FontWeight="Bold" />
<TextBox Name="TxtFirstName" Height="23" HorizontalAlignment="Left" Margin="82,11,0,0" Text
="{Binding FirstName}" VerticalAlignment="Top" Width="120" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="82,40,0,0" Name="TxtLastName" Text
="{Binding LastName}" VerticalAlignment="Top" Width="120" />
<Button Content="Add" Command="{Binding AddNewMemberCommand}" Height="23" Horizontal
Alignment="Left" Margin="82,69,0,0" Name="BtnSubmit" VerticalAlignment="Top" Width="40" Foregrou
nd="DarkSlateGray" ForceCursor="True" Background="AntiqueWhite" FontWeight="Bold" />
</Grid>
6
</ScrollViewer>
</Grid>
</UserControl>
5.1.2 MemberDetailUserControl.cs
namespace WindowsApp.UserControl
{
/// <summary>
/// Interaction logic for MemberDetailUserControl.xaml
/// </summary>
public partial class MemberDetailUserControl : System.Windows.Controls.UserControl
{
private readonly MemberDetailUserControlViewModel _memberDetailUserControlViewModel;
public MemberDetailUserControl()
{
InitializeComponent();
<Window x:Class="WindowsApp.View.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:memberDetailUserControl="clr-namespace:WindowsApp"
xmlns:userControl="clr-namespace:WindowsApp.UserControl"
Title="Member Detail" Height="350" Width="282">
<Grid Width="488">
<userControl:MemberDetailUserControl x:Uid="memberDetailUserControl:MemberDetailUserControl1"
Margin="12,12,244,12" />
</Grid>
</Window>