Вадим Королёв před 1 rokem
rodič
revize
03e9b31aad

+ 1 - 0
src/DontHarmDesktop/DontHarmDesktop.csproj

@@ -64,6 +64,7 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </ApplicationDefinition>
+    <Compile Include="ViewModels\AuthViewModel.cs" />
     <Page Include="Dictionaries\BrushesStyle.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 5 - 2
src/DontHarmDesktop/MainWindow.xaml

@@ -5,14 +5,17 @@
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:local="clr-namespace:DontHarmDesktop"
         mc:Ignorable="d"
-        Title="MainWindow" Height="450" Width="800">
+        Title="Не навреди"
+        Height="600"
+        Width="800"
+        WindowStartupLocation="CenterScreen">
 
     <Grid>
         <StackPanel>
             <Frame x:Name="HeaderFrame" Source="/Pages/HeaderPage.xaml" NavigationUIVisibility="Hidden"></Frame>
             <Frame x:Name="MainFrame" Source="/Pages/AuthPage.xaml" NavigationUIVisibility="Hidden"></Frame>
         </StackPanel>
-        <TextBlock x:Name="TimerTextBlock" Text="" VerticalAlignment="Bottom" HorizontalAlignment="Center"></TextBlock>
+        <TextBlock x:Name="TimerTextBlock" Visibility="Hidden" VerticalAlignment="Bottom" HorizontalAlignment="Center"></TextBlock>
     </Grid>
     
 </Window>

+ 35 - 10
src/DontHarmDesktop/Pages/AuthPage.xaml

@@ -9,17 +9,42 @@
       Title="AuthPage"
       ShowsNavigationUI="False">
 
-    <StackPanel>
-        <TextBlock>Добро пожаловать в Не навреди!<LineBreak/>Пожалуйста, авторизуйтесь</TextBlock>
+    <Page.Resources>
+        <BooleanToVisibilityConverter x:Key="MyConverter"></BooleanToVisibilityConverter>
+    </Page.Resources>
+
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition></RowDefinition>
+            <RowDefinition></RowDefinition>
+            <RowDefinition></RowDefinition>
+            <RowDefinition></RowDefinition>
+        </Grid.RowDefinitions>
         
-        <Label>Логин</Label>
-        <TextBox x:Name="LoginTextBox"></TextBox>
+        <TextBlock Grid.Row="0" TextAlignment="Center">Добро пожаловать в Не навреди!<LineBreak/>Пожалуйста, авторизуйтесь</TextBlock>
+
+        <Grid Margin="5" Grid.Row="1">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="*"/>
+            </Grid.ColumnDefinitions>
+            <Label HorizontalContentAlignment="Right" Grid.Column="0">Логин</Label>
+            <TextBox Grid.Column="1" x:Name="LoginTextBox"/>
+        </Grid>
 
-        <Label>Пароль</Label>
-        <PasswordBox x:Name="PasswordPasswordBox"/>
-        <TextBox Visibility="Collapsed" x:Name="ShowPasswordTextBox"></TextBox>
-        <Button x:Name="TogglePasswordButton" PreviewMouseDown="TogglePasswordButton_MouseDown" PreviewMouseUp="TogglePasswordButton_MouseUp">Показать пароль</Button>
+        <Grid Margin="5" Grid.Row="2">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="2*"/>
+                <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="*"/>
+            </Grid.ColumnDefinitions>
+            
+            <Label Visibility="{Binding Path=MyProperty, Converter={StaticResource MyConverter}}" HorizontalContentAlignment="Right" Grid.Column="0">Пароль</Label>
+            <PasswordBox Grid.Column="1" x:Name="PasswordPasswordBox"/>
+            <TextBox Grid.Column="1" Visibility="Collapsed" x:Name="ShowPasswordTextBox"></TextBox>
+            <Button Grid.Column="2" x:Name="TogglePasswordButton" PreviewMouseDown="TogglePasswordButton_MouseDown" PreviewMouseUp="TogglePasswordButton_MouseUp">Показать пароль</Button>
+        </Grid>
         
-        <Button x:Name="AuthorizeButton" Click="AuthorizeButton_Click">Вход</Button>
-    </StackPanel>
+        <Button Margin="5" Grid.Row="3" x:Name="AuthorizeButton" Click="AuthorizeButton_Click">Вход</Button>
+    </Grid>
 </Page>

+ 17 - 0
src/DontHarmDesktop/Pages/AuthPage.xaml.cs

@@ -12,6 +12,7 @@ using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
+using DontHarmDesktop.ViewModels;
 
 namespace DontHarmDesktop.Pages
 {
@@ -23,8 +24,14 @@ namespace DontHarmDesktop.Pages
         public AuthPage()
         {
             InitializeComponent();
+            DataContext = new AuthViewModel();
         }
 
+        /// <summary>
+        /// Событие нажатия на кнопку "Показать пароль"
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
         private void TogglePasswordButton_MouseDown(object sender, MouseButtonEventArgs e)
         {
             ShowPasswordTextBox.Text = PasswordPasswordBox.Password;
@@ -32,12 +39,22 @@ namespace DontHarmDesktop.Pages
             ShowPasswordTextBox.Visibility = Visibility.Visible;
         }
 
+        /// <summary>
+        /// Событие отжатия кнопки "Показать пароль"
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
         private void TogglePasswordButton_MouseUp(object sender, MouseButtonEventArgs e)
         {
             PasswordPasswordBox.Visibility = Visibility.Visible;
             ShowPasswordTextBox.Visibility = Visibility.Collapsed;
         }
 
+        /// <summary>
+        /// Событие клика на кнопку авторизации
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
         private void AuthorizeButton_Click(object sender, RoutedEventArgs e)
         {
             var success = App.LogOn(LoginTextBox.Text, PasswordPasswordBox.Password);

+ 9 - 15
src/DontHarmDesktop/Pages/LogOnHistory.xaml

@@ -9,20 +9,14 @@
       Title="LogOnHistory">
 
     <StackPanel>
-        <TextBox x:Name="FilterTextBox" ToolTip="Фильтр логинов" TextChanged="FilterTextBox_TextChanged"></TextBox>
-        <ListView x:Name="HistoryRecordsListView">
-            <ListView.View>
-                <GridView>
-                    <GridViewColumn Width="Auto" Header="Login" DisplayMemberBinding="{Binding login}"/>
-                    <GridViewColumn Width="Auto" Header="IP" DisplayMemberBinding="{Binding ip_address}"/>
-                    <GridViewColumn Width="Auto" Header="Удачно" DisplayMemberBinding="{Binding successfull}"/>
-                    <GridViewColumn Width="Auto" DisplayMemberBinding="{Binding created_at}">
-                        <GridViewColumn.Header>
-                            <GridViewColumnHeader Content="Дата" Click="GridViewColumnHeader_Click"/>
-                        </GridViewColumn.Header>
-                    </GridViewColumn>
-                </GridView>
-            </ListView.View>
-        </ListView>
+        <TextBox x:Name="tbFilter" TextChanged="tbFilter_TextChanged"></TextBox>
+        <DataGrid IsReadOnly="True" AutoGenerateColumns="False" x:Name="dgLoginHistory">
+            <DataGrid.Columns>
+                <DataGridTextColumn Header="Логин" Binding="{Binding login}"/>
+                <DataGridTextColumn Header="IP адрес" Binding="{Binding ip_address}"/>
+                <DataGridTextColumn Header="Успешно" Binding="{Binding successfull}"/>
+                <DataGridTextColumn Header="Дата попытки" Binding="{Binding created_at}"/>
+            </DataGrid.Columns>
+        </DataGrid>
     </StackPanel>
 </Page>

+ 19 - 53
src/DontHarmDesktop/Pages/LogOnHistory.xaml.cs

@@ -1,6 +1,7 @@
 using DontHarmDesktop.Models;
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.ComponentModel;
 using System.Globalization;
 using System.Linq;
@@ -24,77 +25,42 @@ namespace DontHarmDesktop.Pages
     public partial class LogOnHistory : Page
     {
         /// <summary>
-        /// Направление сортировки колонки даты
+        /// Представление списка попыток входа
         /// </summary>
-        private ListSortDirection date_sort = ListSortDirection.Descending;
-        
+        ICollectionView loginAttemptsView;
+
         public LogOnHistory()
         {
             InitializeComponent();
             
-            // Привязка записей из БД к ListView
-            List<login_attempts> history = App.Context.login_attempts.ToList();
-            HistoryRecordsListView.ItemsSource = history;
+            // Сбор записей и привязка callback-фильтра
+            var loginAttempts = App.Context.login_attempts.ToList();
+            loginAttemptsView = CollectionViewSource.GetDefaultView(loginAttempts);
+            loginAttemptsView.Filter = FilterByLogin;
 
-            // Привязка фильтра
-            CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(HistoryRecordsListView.ItemsSource);
-            view.Filter = LoginFilter;
+            // Привязка представления к контролу
+            dgLoginHistory.ItemsSource = loginAttempts;
         }
 
         /// <summary>
-        /// Обработчик события нажатия на заголовок колонки даты входа
+        /// Callback-метод для фильтрации записей по логину
         /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
+        /// <param name="item"></param>
+        /// <returns></returns>
+        private bool FilterByLogin(object item)
         {
-            if (date_sort == ListSortDirection.Ascending)
-            {
-                date_sort = ListSortDirection.Descending;
-            } else
-            {
-                date_sort = ListSortDirection.Ascending;
-            }
-
-            var columnHeader = (sender as GridViewColumnHeader);
-            if (date_sort == ListSortDirection.Descending)
-            {
-                columnHeader.Content = "Дата (по убыванию)";
-            } else
-            {
-                columnHeader.Content = "Дата (по возрастанию)";
-            }
-
-            HistoryRecordsListView.Items.SortDescriptions.Clear();
-            HistoryRecordsListView.Items.SortDescriptions.Add(new SortDescription("created_at", date_sort));
-
+            login_attempts Attempt = item as login_attempts;
+            return Attempt.login.Contains(tbFilter.Text);
         }
 
         /// <summary>
-        /// Событие изменения текста в поле ввода фильтра
+        /// Событие изменения текста в поле фильтрации
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
-        private void FilterTextBox_TextChanged(object sender, TextChangedEventArgs e)
-        {
-            CollectionViewSource.GetDefaultView(HistoryRecordsListView.ItemsSource).Refresh();
-        }
-
-        /// <summary>
-        /// Фильтр логинов
-        /// </summary>
-        /// <param name="item"></param>
-        /// <returns></returns>
-        private bool LoginFilter(object item)
+        private void tbFilter_TextChanged(object sender, TextChangedEventArgs e)
         {
-            string filterText = FilterTextBox.Text;
-            if (string.IsNullOrEmpty(filterText))
-            {
-                return true;
-            } else
-            {
-                return (item as login_attempts).login.IndexOf(filterText, StringComparison.OrdinalIgnoreCase) >= 0;
-            }
+            loginAttemptsView.Refresh();
         }
     }
 }

+ 22 - 0
src/DontHarmDesktop/ViewModels/AuthViewModel.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DontHarmDesktop.ViewModels
+{
+    class AuthViewModel
+    {
+        public bool MyProperty {
+            get {
+                return true;
+            }
+            
+            set
+            {
+
+            }
+        }
+    }
+}