第一步:先建立数据库,这里使用EF建立联系
首先在sql server
这个是LoginWindow.xaml登录页面,这个是自己写的
<mah:MetroWindow xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" x:Class="CMS.Windows.LoginWindow"
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"
xmlns:local="clr-namespace:CMS.Windows"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
<--! 这里 -->
DataContext="{Binding Source={StaticResource Locator},Path=Login}"
Title="LoginWindow" Height="350" Width="600">
这里的Locator是指文件ViewModelLocator.cs,这个类里存放了许多viewmodel,通过中间的这个类,使用path可以调用到对应页面的viewmodel
<Grid>
<Grid Margin="100 50 50 50">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding AppData.SystemName}" HorizontalAlignment="Center" FontSize="36"/>
<StackPanel Grid.Row="1" VerticalAlignment="Center" Orientation="Horizontal">
<TextBlock Text="用户名" Width="60" FontSize="18" Margin="50 0 0 0"/>
<TextBox Text="{Binding AppData.CurrentUser.Name}" Width="200" Margin="10 0 0 0"/>
</StackPanel>
<StackPanel Grid.Row="2" VerticalAlignment="Center" Orientation="Horizontal">
<TextBlock Text="密码" Width="60" FontSize="18" Margin="50 0 0 0"/>
<TextBox Text="{Binding AppData.CurrentUser.Password}" Width="200" Margin="10 0 0 0"/>
</StackPanel>
<StackPanel Grid.Row="3" VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="登录" Width="80" Command="{Binding LoginCommand2}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
<Button Content="取消" Width="80" Command="{Binding CloseCommand}" Margin="50 0 0 0"/>
</StackPanel>
</Grid>
</Grid>
下面的绑定(binding)可以直接绑定对应viewmodel(LoginViewModel)里的属性
下面这个是绑定命令的具体代码
// 这个可以关闭对应窗口
public RelayCommand<Window> LoginCommand2
{
get
{
return new RelayCommand<Window>((arg) =>
{
// 实例化一个对象
MemberProvider memberProvider = new MemberProvider();
// 验证登录
var list = memberProvider.Select();
var user = list.FirstOrDefault(item => item.Name == AppData.CurrentUser.Name
&& item.Password == AppData.CurrentUser.Password);
// 成功和不成功的操作
if (user == null)
{
MessageBox.Show("用户名或密码错误");
}
else
{
//调用主窗体
MainWindow mainWindow = new MainWindow();
mainWindow.Show();
//关闭当前窗口
arg.Close();
}
});
}
}
ToggleButtonDictonary资源字典
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="ToggleButtonStyle" TargetType="{x:Type ToggleButton}">
<Setter Property="FontFamily" Value="../Fonts/#FontAwesome"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<TextBlock x:Name="textBlock" Text="" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="TextBlock.Text" Value="" TargetName="textBlock"/>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="TextBlock.Text" Value="" TargetName="textBlock"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
这个资源字典的具体使用
<Grid Grid.Column="1">
<ToggleButton x:Name="toggleButton" Width="30" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Content="" FontSize="20" Margin="10 25" Foreground="White" Style="{DynamicResource ToggleButtonStyle}" />
</Grid>