Przeglądaj źródła

Работа со стилями и формами

user 6 miesięcy temu
rodzic
commit
8cef45d5c7

+ 2 - 0
src/DontHarmDesktop/App.xaml

@@ -9,6 +9,8 @@
                 <ResourceDictionary Source="Dictionaries/BrushesStyle.xaml"/>
                 <ResourceDictionary Source="Dictionaries/MainStyle.xaml"/>
                 <ResourceDictionary Source="Dictionaries/Buttons.xaml"/>
+                <ResourceDictionary Source="Dictionaries/Headings.xaml"/>
+                <ResourceDictionary Source="Dictionaries/Forms.xaml"/>
             </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
     </Application.Resources>

+ 10 - 2
src/DontHarmDesktop/Dictionaries/Buttons.xaml

@@ -1,11 +1,19 @@
 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-    <Style x:Key="Suggested" TargetType="Button">
+
+
+    <Style x:Key="TextButton" TargetType="Button">
+        <Setter Property="MinWidth" Value="128"/>
+    </Style>
+
+    <Style x:Key="Suggested" TargetType="Button" BasedOn="{StaticResource TextButton}">
         <Setter Property="Background" Value="{StaticResource SuggestedAction}"/>
         <Setter Property="Foreground" Value="White"/>
     </Style>
-    <Style x:Key="Destructive" TargetType="Button">
+
+    <Style x:Key="Destructive" TargetType="Button" BasedOn="{StaticResource TextButton}">
         <Setter Property="Background" Value="{StaticResource DestructiveAction}"/>
         <Setter Property="Foreground" Value="White"/>
     </Style>
+    
 </ResourceDictionary>

+ 16 - 0
src/DontHarmDesktop/Dictionaries/Forms.xaml

@@ -0,0 +1,16 @@
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+    
+    <Style x:Key="FormContainer" TargetType="StackPanel">
+        <Setter Property="Margin" Value="32,0"/>
+    </Style>
+    
+    <Style x:Key="FormBody" TargetType="Grid">
+        <Setter Property="Margin" Value="0"/>
+    </Style>
+
+    <Style x:Key="ButtonPanel" TargetType="StackPanel">
+        <Setter 
+    </Style>
+    
+</ResourceDictionary>

+ 17 - 0
src/DontHarmDesktop/Dictionaries/Headings.xaml

@@ -0,0 +1,17 @@
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+    <Style TargetType="TextBlock">
+        <Setter Property="Padding" Value="0"/>
+        <Setter Property="Margin" Value="0"/>
+        <Setter Property="HorizontalAlignment" Value="Left"/>
+    </Style>
+    <Style x:Key="H1" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="32"/>
+    </Style>
+    <Style x:Key="H2" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="26"/>
+    </Style>
+    <Style x:Key="H3" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="20"/>
+    </Style>
+</ResourceDictionary>

+ 17 - 0
src/DontHarmDesktop/DontHarmDesktop.csproj

@@ -86,9 +86,13 @@
       <SubType>Designer</SubType>
     </ApplicationDefinition>
     <Compile Include="AuthState.cs" />
+    <Compile Include="Navigation.cs" />
     <Compile Include="Pages\ServiceAdd.xaml.cs">
       <DependentUpon>ServiceAdd.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Pages\ServiceEdit.xaml.cs">
+      <DependentUpon>ServiceEdit.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Pages\Services.xaml.cs">
       <DependentUpon>Services.xaml</DependentUpon>
     </Compile>
@@ -96,6 +100,7 @@
     <Compile Include="ViewModels\AuthViewModel.cs" />
     <Compile Include="ViewModels\MainViewModel.cs" />
     <Compile Include="ViewModels\ServiceAddViewModel.cs" />
+    <Compile Include="ViewModels\ServiceEditViewModel.cs" />
     <Compile Include="ViewModels\ServicesViewModel.cs" />
     <Page Include="Dictionaries\BrushesStyle.xaml">
       <SubType>Designer</SubType>
@@ -105,6 +110,14 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="Dictionaries\Forms.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="Dictionaries\Headings.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="Dictionaries\MainStyle.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
@@ -133,6 +146,10 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="Pages\ServiceEdit.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="Pages\Services.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 36 - 0
src/DontHarmDesktop/Navigation.cs

@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Controls;
+
+namespace DontHarmDesktop
+{
+    public static class Navigation
+    {
+        private static Frame getMainFrame()
+        {
+            return (App.Current.MainWindow as MainWindow).MainFrame;
+        }
+
+        /// <summary>
+        /// Осуществляет переход к странице редактирования услуги
+        /// </summary>
+        /// <param name="service">Услуга для редактирования</param>
+        public static void toServiceEdit(Models.services service)
+        {
+            getMainFrame().Navigate(new Pages.ServiceEdit(service));
+        }
+
+        public static void toServiceAdd()
+        {
+            getMainFrame().Navigate(new Pages.ServiceAdd());
+        }
+
+        public static void toServicesList() 
+        {
+            getMainFrame().Navigate(new Pages.Services());
+        }
+    }
+}

+ 27 - 19
src/DontHarmDesktop/Pages/ServiceAdd.xaml

@@ -10,30 +10,38 @@
 
     <Grid>
         <Grid.ColumnDefinitions>
-            <ColumnDefinition Width="Auto"/>
+            <ColumnDefinition Width="0.10*"/>
             <ColumnDefinition Width="*"/>
+            <ColumnDefinition Width="0.10*"/>
         </Grid.ColumnDefinitions>
+        
+        <Grid Grid.Column="1">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="Auto"/>
+                <ColumnDefinition Width="*"/>
+            </Grid.ColumnDefinitions>
 
-        <Grid.RowDefinitions>
-            <RowDefinition Height="32"/>
-            <RowDefinition Height="32"/>
-            <RowDefinition Height="32"/>
-            <RowDefinition Height="32"/>
-        </Grid.RowDefinitions>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="32"/>
+                <RowDefinition Height="32"/>
+                <RowDefinition Height="32"/>
+                <RowDefinition Height="32"/>
+            </Grid.RowDefinitions>
 
-        <TextBlock Text="Наименование" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" />
-        <TextBlock Text="Цена" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" />
-        <TextBlock Text="Код" Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" />
+            <TextBlock Text="Наименование" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" />
+            <TextBlock Text="Цена" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" />
+            <TextBlock Text="Код" Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" />
 
-        <TextBox Grid.Row="0" Grid.Column="1" Margin="4" Text="{Binding Name}" />
-        <TextBox Grid.Row="1" Grid.Column="1" Margin="4" Text="{Binding Price}"/>
-        <TextBox Grid.Row="2" Grid.Column="1" Margin="4" Text="{Binding Code}"/>
+            <TextBox Grid.Row="0" Grid.Column="1" Margin="4" Text="{Binding Name}" />
+            <TextBox Grid.Row="1" Grid.Column="1" Margin="4" Text="{Binding Price}"/>
+            <TextBox Grid.Row="2" Grid.Column="1" Margin="4" Text="{Binding Code}"/>
 
-        <Button 
-            Grid.Row="3"
-            Grid.Column="1"
-            Margin="4"
-            Style="{StaticResource Suggested}"
-            Command="{Binding Submit}">Сохранить</Button>
+            <Button 
+                Grid.Row="3"
+                Grid.Column="1"
+                Margin="4"
+                Style="{StaticResource Suggested}"
+                Command="{Binding Submit}">Сохранить</Button>
+        </Grid>
     </Grid>
 </Page>

+ 44 - 0
src/DontHarmDesktop/Pages/ServiceEdit.xaml

@@ -0,0 +1,44 @@
+<Page x:Class="DontHarmDesktop.Pages.ServiceEdit"
+      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" 
+      xmlns:local="clr-namespace:DontHarmDesktop.Pages"
+      mc:Ignorable="d" 
+      d:DesignHeight="450" d:DesignWidth="800"
+      Title="ServiceEdit">
+
+    <StackPanel Margin="32,0">
+
+        <TextBlock Style="{StaticResource H2}">Редактирование услуги</TextBlock>
+        
+        <Grid Style="{StaticResource FormBody}">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="Auto"/>
+                <ColumnDefinition Width="*"/>
+            </Grid.ColumnDefinitions>
+
+            <Grid.RowDefinitions>
+                <RowDefinition Height="32"/>
+                <RowDefinition Height="32"/>
+                <RowDefinition Height="32"/>
+                <RowDefinition Height="32"/>
+            </Grid.RowDefinitions>
+
+            <TextBlock Text="Наименование" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" />
+            <TextBlock Text="Цена" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" />
+            <TextBlock Text="Код" Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" />
+
+            <TextBox Grid.Row="0" Grid.Column="1" Margin="4" Text="{Binding Name}" />
+            <TextBox Grid.Row="1" Grid.Column="1" Margin="4" Text="{Binding Price}"/>
+            <TextBox Grid.Row="2" Grid.Column="1" Margin="4" Text="{Binding Code}"/>
+
+            <Button 
+                Grid.Row="3"
+                Grid.Column="1"
+                Margin="4"
+                Style="{StaticResource Suggested}"
+                Command="{Binding Submit}">Сохранить</Button>
+        </Grid>
+    </StackPanel>
+</Page>

+ 29 - 0
src/DontHarmDesktop/Pages/ServiceEdit.xaml.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace DontHarmDesktop.Pages
+{
+    /// <summary>
+    /// Логика взаимодействия для ServiceEdit.xaml
+    /// </summary>
+    public partial class ServiceEdit : Page
+    {
+        public ServiceEdit(Models.services service)
+        {
+            InitializeComponent();
+            DataContext = new ViewModels.ServiceEditViewModel(service);
+        }
+    }
+}

+ 27 - 34
src/DontHarmDesktop/Pages/Services.xaml

@@ -8,41 +8,34 @@
       d:DesignHeight="450" d:DesignWidth="800"
       Title="Services">
 
-    <Grid>
-        <Grid.RowDefinitions>
-            <RowDefinition Height="32"/>
-            <RowDefinition Height="*"/>
-        </Grid.RowDefinitions>
+    <StackPanel Style="{StaticResource FormContainer}">
+        <TextBlock Text="Просмотр услуг" Style="{StaticResource H2}"/>
+        <Grid Style="{StaticResource FormBody}">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="Auto"/>
+                <RowDefinition Height="*"/>
+            </Grid.RowDefinitions>
 
-        <Grid Grid.Row="0">
-            <Grid.ColumnDefinitions>
-                <ColumnDefinition Width="128"/>
-                <ColumnDefinition Width="128"/>
-                <ColumnDefinition Width="128"/>
-            </Grid.ColumnDefinitions>
+            <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,4" Style="{StaticResource ButtonPanel}">
 
-            <Button 
-                Grid.Column="0" 
-                Style="{StaticResource Suggested}"
-                Command="{Binding AddServiceCmd}"
-                Margin="4">Добавить</Button>
-            <Button 
-                Grid.Column="1"
-                Margin="4">Редактировать</Button>
-            <Button 
-                Grid.Column="2"
-                Style="{StaticResource Destructive}"
-                Margin="4">Удалить</Button>
-        </Grid>
-
-        <DataGrid Grid.Row="1" ItemsSource="{Binding Services}" AutoGenerateColumns="False" IsReadOnly="True">
-            <DataGrid.Columns>
-                <DataGridTextColumn Header="Наименование" Binding="{Binding name}"/>
-                <DataGridTextColumn Header="Цена" Binding="{Binding price}"/>
-                <DataGridTextColumn Header="Код услуги" Binding="{Binding code}"/>
-            </DataGrid.Columns>
-        </DataGrid>
+                <Button 
+                    Style="{StaticResource Suggested}"
+                    Command="{Binding AddServiceCmd}">Добавить</Button>
+                <Button
+                    Style="{StaticResource TextButton}"
+                    Command="{Binding EditServiceCmd}">Редактировать</Button>
+                <Button 
+                    Style="{StaticResource Destructive}"
+                    Command="{Binding AddServiceCmd}">Удалить</Button>
+            </StackPanel>
 
-        
-    </Grid>
+            <DataGrid Grid.Row="1" ItemsSource="{Binding Services}" AutoGenerateColumns="False" IsReadOnly="True">
+                <DataGrid.Columns>
+                    <DataGridTextColumn Header="Наименование" Binding="{Binding name}"/>
+                    <DataGridTextColumn Header="Цена" Binding="{Binding price}"/>
+                    <DataGridTextColumn Header="Код услуги" Binding="{Binding code}"/>
+                </DataGrid.Columns>
+            </DataGrid>
+        </Grid>
+    </StackPanel>
 </Page>

+ 47 - 0
src/DontHarmDesktop/ViewModels/ServiceEditViewModel.cs

@@ -0,0 +1,47 @@
+using Prism.Commands;
+using Prism.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DontHarmDesktop.ViewModels
+{
+    public class ServiceEditViewModel : BindableBase
+    {
+        public string Name { get; set; }
+        public float Price { get; set; }
+        public string Code { get; set; }
+        public DelegateCommand Submit { get; set; }
+        public Models.services Service { get; set; }
+
+        public ServiceEditViewModel(Models.services service)
+        {
+            Submit = new DelegateCommand(SubmitExecuted);
+        }
+
+        public void SubmitExecuted()
+        {
+            // Валидация
+            decimal price = (decimal)Price;
+            List<string> errors = new List<string>();
+            bool isValid = Validation.CheckService(Code, price, Name, errors);
+
+            if (!isValid)
+            {
+                Validation.DisplayErrors(errors);
+                return;
+            }
+
+            Service.price = price;
+            Service.code = Code;
+            Service.name = Name;
+
+            var db = new DontHarmDesktop.Models.Entities();
+            db.SaveChanges();
+
+            Navigation.toServicesList();
+        }
+    }
+}

+ 13 - 3
src/DontHarmDesktop/ViewModels/ServicesViewModel.cs

@@ -13,8 +13,10 @@ namespace DontHarmDesktop.ViewModels
     {
         public List<services> Services { get; set; }
         public DelegateCommand AddServiceCmd { get; set; }
-        
-        public ServicesViewModel() 
+        public DelegateCommand EditServiceCmd { get; set; }
+        public Models.services SelectedService { get; set; }
+
+        public ServicesViewModel()
         {
             var db = new Models.Entities();
 
@@ -24,9 +26,17 @@ namespace DontHarmDesktop.ViewModels
             AddServiceCmd = new DelegateCommand(AddServiceExecuted);
         }
 
+        /// <summary>
+        /// Переходит к странице добавления
+        /// </summary>
         private void AddServiceExecuted()
         {
-            (App.Current.MainWindow as MainWindow).MainFrame.Navigate(new Pages.ServiceAdd());
+            Navigation.toServiceAdd();
+        }
+
+        private void EditServiceExecuted()
+        {
+            Navigation.toServiceEdit(SelectedService);
         }
     }
 }