Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/39: Рейтинг темы: голосов - 39, средняя оценка - 4.85
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269

Склейщик фото (создание MVVM приложения)

29.04.2019, 16:36. Показов 9167. Ответов 162
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тема создана как продолжение тем:
Привязать данные к кнопке System.Windows.Data Error: 40
Открыть 2 картинки, переместить, записать координаты используя команду с параметрами
ScrollViewer по вертикали и горизонтали
После выбора файла в диалоговом окне, разместить изображение из файла в canvas
Подключить класс Bitmap

Элд Хасп, я хотел бы после загрузки первого фото, поворачивать её и перемещать, в специальной графе будут отображаться начальные координаты первого фото (левого верхнего угла), и чтоб при загрузки они всегда были бы в верхнем левом углу, потом загружаю второе фото(в специальном месте отображаются координаты 2-ого фото левого верхнего угла), хотел бы так же поворачивать (сейчас после загрузки второго фото поворачиваются 2 картинки, а не вторая), и в специальном месте отображать смещение второго фото по сравнению с первым (так же, по левому верхнему углу). Я не очень понял на счет размеров, я хотел бы чтобы фото отображались во всю величину, но я не буду знать какого фото будут размера. Сейчас приложение ведет себя очень странно, копки стали действительно активны, спасибо! Но когда я пытаюсь их сдвинуть, значение меняется в Text="{Binding Offset}", только не обычно, влево/право - целые числа, а вверх/вниз меняются, сотые этого числа, при этом картинки сами не двигаются, ни первая, ни вторая...

Добавлено через 2 минуты
Элд Хасп, когда запускаю приложение, кнопка вверх и влево не активны, они становятся активны если кликнуть вправо/вниз

Добавлено через 1 минуту
Элд Хасп, задав жестко размер картинке, она деформируется
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2019, 16:36
Ответы с готовыми решениями:

Структура WPF приложения на MVVM
Здравствуйте. Разрабатываю приложение на WPF. Использую шаблон MVVM. В представлении контент сгруппирован по вкладкам TabControl. ...

Пример реализации WPF+MVVM приложения
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html Пример решения ТЗ по теме...

Паттерн MVVM или как писать приложения на WPF
Собтвенно вопрос в заголовке. По-скольку WPF поддерживает привязку различным образом наверно это нужно как-то использовать, а не просто как...

162
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
04.05.2019, 15:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ShmelVG Посмотреть сообщение
На данный момент ни одна из кнопок не работает по нажатии (дальше к стилям ещё не спускался, запнулся на этом месте)
Они и не должны работать. На данный момент мы создаём дизайн View под интерфейс.
После создания дизайна сделаем VMDD и там пропишем (частично) логику команд.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
04.05.2019, 16:03
Цитата Сообщение от ShmelVG Посмотреть сообщение
- всё шло хорошо до этого момента,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
И сама кнопка с поясняющим текстом
- этот код должен быть + к открыть "Фото 1" и "Фото 2"?
Я пока добавил вниз ещё строчку, под кнопками смещения.

Прикладываю проект в текущем состоянии
Вложения
Тип файла: 7z PhotoGluer.7z (250.6 Кб, 1 просмотров)
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
04.05.2019, 16:22
ShmelVG, Я пока занят. Возможно позже продолжу. Или завтра.
Подберите пока рисунки под кнопки поворота (круговая стрелка) и направление смешения (стрелка).
И разберите то, что уже сделано.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
04.05.2019, 17:12  [ТС]
Добавлено через 26 минут
Элд Хасп, я посмотрел вложение, но кнопки так же не реагируют и при точке останова не заходит даже туда((
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
04.05.2019, 18:38
Цитата Сообщение от ShmelVG Посмотреть сообщение
посмотрел вложение, но кнопки так же не реагируют и при точке останова не заходит даже туда((
Я же писал Вам.
Они и не должны пока работать.
Сейчас мы делаем дизайн View. Команды пока не реализованы.
Их реализация будет уже на следующих этапах.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
04.05.2019, 20:05
Цитата Сообщение от ShmelVG Посмотреть сообщение
PhotoGluer.rar
Использовал картинку для поворота


Теперь для обработки значений поворотов надо создать WPF конвертер который может возвращать абсолютное значение и знак значения. Конвертер создаём в библиотеке.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Globalization;
using System.Windows.Data;
 
namespace CommLibrary
{
    public class AngleRotateConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (
                    value == null ||
                    (!(value is double numb) && !double.TryParse(value.ToString(), out numb))
                )
                return null;
 
            if (parameter != null && parameter.ToString().ToUpper().Contains("ABS"))
                return Math.Abs(numb);
 
            if (parameter != null && parameter.ToString().ToUpper().Contains("SIGN"))
                return numb >= 0 ? 1 : -1;
            return numb;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}
Теперь стиль для кнопок
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    <commlibrary:AngleRotateConverter x:Key="AngleRotateConverter"/>
    <Style TargetType="Button" x:Key="Style.Button.Rotate">
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property="Command" Value="{Binding RotateCommand}"/>
        <Setter Property="CommandParameter" Value="{Binding}"/>
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate DataType="{x:Type sys:Double}">
                    <Viewbox>
                        <Grid Width="32" Height="32">
                            <Image Source="/PhotoGluer;component/Resources/Стрелка поворота.png" RenderTransformOrigin="0.5,0.5">
                                <Image.Style>
                                    <Style TargetType="Image">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding ConverterParameter=sign, Converter={StaticResource AngleRotateConverter}}" Value="-1">
                                                <Setter Property="RenderTransform">
                                                    <Setter.Value>
                                                        <TransformGroup>
                                                            <ScaleTransform ScaleY="1" ScaleX="-1"/>
                                                            <TranslateTransform/>
                                                        </TransformGroup>
                                                    </Setter.Value>
                                                </Setter>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Image.Style>
                            </Image>
                            <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,2,0,0" FontSize="14">
                                    <Run Text="{Binding ConverterParameter=abs, Converter={StaticResource AngleRotateConverter}, Mode=OneWay}"/><Run Text="°"/>
                            </TextBlock>
                        </Grid>
                    </Viewbox>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
И таким получается Grid для кнопок поворота
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
                    <Grid Grid.Row="1">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition></ColumnDefinition>
                            <ColumnDefinition></ColumnDefinition>
                        </Grid.ColumnDefinitions>
 
                        <Grid.RowDefinitions>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                        </Grid.RowDefinitions>
 
                        <TextBlock 
                                Grid.ColumnSpan="2" 
                                Grid.Row="0" 
                                TextWrapping="Wrap" 
                                Text="Повернуть" 
                                VerticalAlignment="Center" 
                                HorizontalAlignment="Center"
                                FontSize="18"/>
 
                        <Button Grid.Column="0"
                                Grid.Row="1" 
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center" 
                                FontSize="12"
                                Command="{Binding RotateCommand}"
                                CommandParameter="-1">
                            <Grid>
                                <Image Source="/PhotoGluer;component/Resources/Стрелка поворота.png" RenderTransformOrigin="0.5,0.5">
                                    <Image.RenderTransform>
                                        <TransformGroup>
                                            <ScaleTransform ScaleY="1" ScaleX="-1"/>
                                            <TranslateTransform/>
                                        </TransformGroup>
                                    </Image.RenderTransform>
                                </Image>
                                <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,2,0,0">
                                    <Run Text="90"/><Run Text="°"/>
                                </TextBlock>
                            </Grid>
                        </Button>
 
                        <Button Grid.Row="1" 
                                Style="{StaticResource Style.Button.Rotate}">
                            -1
                        </Button>
 
                        <Button Grid.Row="2" 
                                Style="{StaticResource Style.Button.Rotate}">
                            -10
                        </Button>
                        <Button Grid.Row="3" 
                                Style="{StaticResource Style.Button.Rotate}">
                            -45
                        </Button>
                        <Button Grid.Row="4" 
                                Style="{StaticResource Style.Button.Rotate}">
                            -90
                        </Button>
 
                        <Button 
                                Grid.Column="1"
                                Grid.Row="1" 
                                Style="{StaticResource Style.Button.Rotate}">
                            1
                        </Button>
 
                        <Button 
                                Grid.Column="1"
                                Grid.Row="2" 
                                Style="{StaticResource Style.Button.Rotate}">
                            10
                        </Button>
                        <Button 
                                Grid.Column="1"
                                Grid.Row="3" 
                                Style="{StaticResource Style.Button.Rotate}">
                            45
                        </Button>
                        <Button 
                                Grid.Column="1"
                                Grid.Row="4" 
                                Style="{StaticResource Style.Button.Rotate}">
                            90
                        </Button>
 
                    </Grid>
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
04.05.2019, 20:12  [ТС]
Элд Хасп, мне стало не много легче, а то я уже нервничать начал)
Добавил во вью стили только для кнопок поворота и добавил фото, но фото не отображаются у меня в приложении, хотя путь указан правильно...пробовал копаться в свойствах фото, но ничего не вышло( Теперь выглядит ужасно))

PhotoGluer.rar
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
04.05.2019, 23:27
Цитата Сообщение от ShmelVG Посмотреть сообщение
Добавил во вью стили только для кнопок поворота и добавил фото, но фото не отображаются у меня в приложении, хотя путь указан правильно...пробовал копаться в свойствах фото, но ничего не вышло( Теперь выглядит ужасно))
Не торопитесь.
Сейчас закончим с дизайном панели управление.

Остались кнопки перемещения. Использую такую иконку

Стиль кнопок
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    <Style TargetType="Button" x:Key="Style.Button.Move">
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property="Command" Value="{Binding RotateCommand}"/>
        <Setter Property="CommandParameter" Value="{Binding}"/>
        <Setter Property="Margin" Value="2"/>
        <Setter Property="BorderThickness" Value="2"/>
        <Setter Property="Command" Value="{Binding MoveCommand}"/>
        <Setter Property="CommandParameter" Value="{Binding Content, RelativeSource={RelativeSource Self}}"/>
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate DataType="{x:Type viewModel:DirectionEnum}">
                    <Image Source="/PhotoGluer;component/Resources/Стрелка.png" RenderTransformOrigin="0.5,0.5">
                        <Image.Style>
                            <Style TargetType="Image">
                                <Setter Property="Visibility" Value="Collapsed"/>
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding}" Value="{x:Static viewModel:DirectionEnum.Rigth}">
                                        <Setter Property="Visibility" Value="Visible"/>
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding}" Value="{x:Static viewModel:DirectionEnum.Up}">
                                        <Setter Property="Visibility" Value="Visible"/>
                                        <Setter Property="RenderTransform">
                                            <Setter.Value>
                                                <TransformGroup>
                                                    <RotateTransform Angle="-90"/>
                                                </TransformGroup>
                                            </Setter.Value>
                                        </Setter>
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding}" Value="{x:Static viewModel:DirectionEnum.Down}">
                                        <Setter Property="Visibility" Value="Visible"/>
                                        <Setter Property="RenderTransform">
                                            <Setter.Value>
                                                <TransformGroup>
                                                    <RotateTransform Angle="90"/>
                                                </TransformGroup>
                                            </Setter.Value>
                                        </Setter>
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding}" Value="{x:Static viewModel:DirectionEnum.Left}">
                                        <Setter Property="Visibility" Value="Visible"/>
                                        <Setter Property="RenderTransform">
                                            <Setter.Value>
                                                <TransformGroup>
                                                    <RotateTransform Angle="180"/>
                                                </TransformGroup>
                                            </Setter.Value>
                                        </Setter>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Image.Style>
                    </Image>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Grid с кнопками перемещения
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
                    <Grid Grid.Row="2">
 
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition></ColumnDefinition>
                            <ColumnDefinition></ColumnDefinition>
                            <ColumnDefinition></ColumnDefinition>
                        </Grid.ColumnDefinitions>
 
                        <Grid.RowDefinitions>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                        </Grid.RowDefinitions>
 
                        <Button Grid.Column="1" 
                                Content="{x:Static viewModels:DirectionEnum.Up}"
                                Style="{StaticResource Style.Button.Move}"/>
                        <Button Grid.Row="1" 
                                Content="{x:Static viewModels:DirectionEnum.Left}"
                                Style="{StaticResource Style.Button.Move}"/>
                        <Button Grid.Column="2"
                                Grid.Row="1"
                                Content="{x:Static viewModels:DirectionEnum.Rigth}"
                                Style="{StaticResource Style.Button.Move}"/>
                        <Button Grid.Column="1" 
                                Grid.Row="2"
                                Content="{x:Static viewModels:DirectionEnum.Down}"
                                Style="{StaticResource Style.Button.Move}"/>
 
 
                        <!--<Button 
                                    Grid.Column="0" 
                                    Grid.Row="1" 
                                    Content="Влево" 
                                    FontWeight="Bold" 
                                    FontSize="16" 
                                    Margin="2"
                                    BorderThickness="2"
                                    Command="{Binding MoveCommand}"
                                    CommandParameter="Left"/>
 
                        <Button 
                                    Grid.Column="2" 
                                    Grid.Row="1" 
                                    Content="Вправо" 
                                    FontWeight="Bold" 
                                    Margin="2"
                                    FontSize="16" 
                                    BorderThickness="2"
                                    Command="{Binding MoveCommand}"
                                    CommandParameter="Rigth"/>
 
                        <Button 
                                    Grid.Column="1" 
                                    Grid.Row="2" 
                                    Content="Вниз" 
                                    FontWeight="Bold" 
                                    Margin="2"
                                    FontSize="16" 
                                    BorderThickness="2"
                                    Command="{Binding MoveCommand}"
                                    CommandParameter="Down"/>-->
 
                    </Grid>
Проект в текущем состоянии прикладываю.
В нём немного изменил некоторые стили.

Доведите дизайн панели управления до нужного Вам: размеры и расположение кнопок, размеры текста, цвета и т.д.

Как доведёте скиньте проект и продолжим дальше - начнём создавать VMDD.
Вложения
Тип файла: 7z PhotoGluer v1.7z (277.4 Кб, 2 просмотров)
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
05.05.2019, 22:47  [ТС]
Элд Хасп, мне очень жаль что я только сейчас пишу, я часов 6 убил на обновление VS17 , начал обновлять из-за того, что не перестал читать библиотеку с последнего Вашего проекта, но после обновления проблема не ушла, мне понравился дизайн, но возникли ошибки, которые я не знаю как исправить, проект запускается, но вместо стрелок, старые надписи (вверх/вниз/влево/вправо).
Во view ошибка <ResourceDictionary Source="PhotoGluerDict.xaml"/> - "произошла ошибка при поиска словаря ресурсов PhotoGluerDict.xaml", а в самом словаре ругается на первый знак "<" <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" .... и подчеркивает <commlibrary:AngleRotateConverter x:Key="AngleRotateConverter"/> - Имя AngleRotateConverter не существует в пространстве Имен "clr-namespace:CommLibrary;assembly=CommLibra ry".
В обозревателе решения библиотека CommLibrary (сбой загрузки) - не удается загрузить файл проекта.
Добавил вручную dll в ссылки рабочего проекта, сначала был желтый треугольник, удалил - загрузил заново (из папки Debug), значек желтый исчез, но проблема так осталась...

Добавлено через 1 минуту
Вручную загружал из ...\CommLibrary\bin\Debug\CommLibrary.dll

Добавлено через 5 минут
Когда в обозревателе решения кликаю на CommLibrary - Перезагрузить проект, то возникает ошибка - ...\PhotoGluer v1\PhotoGluer\CommLibrary\CommLibrary.cs proj перемещен , переименован или отсутствует на компьютере.

Пробовал удалять весь проект и заново скачивать, но ничего не помогло(
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.05.2019, 23:21
Цитата Сообщение от ShmelVG Посмотреть сообщение
Пробовал удалять весь проект и заново скачивать, но ничего не помогло(
Сейчас архив перепроверю.
А Студию использовал 2019, но из-за этого не должно быть ошибок.

Добавлено через 4 минуты
Действительно - архив не запускается!
Сейчас перепакую проект.
И заново выставлю.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.05.2019, 23:35
Вот перепакованный проект.
Распаковку и сборку перепроверил.
Вложения
Тип файла: 7z PhotoGluer v1+.7z (276.4 Кб, 1 просмотров)
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.05.2019, 23:36
Если какие ошибки будут - сразу напишите мне.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.05.2019, 23:44
ShmelVG, ещё такой нюанс есть.
Так как изначально приложение делалось только для View, то для простоты я слил Модель с ViewModel.
Из-за этого реализация MVVM получилась скомканная. Я то понимаю где в ViewModel её методы, а где методы относящиеся к Model.
Вот теперь вопрос к Вам - как лучше дальше делать?
Для ясного понимания (и, соответственно, получения учебного опыта) лучше Модель явно выделить. Но так получится сложнее в реализации, так в данном случае Решение в основном нацелено на визуальную часть.

Решите какой вариант реализации выбрать.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
06.05.2019, 09:18  [ТС]
Элд Хасп, Всё работает) Спасибо! Как было бы правильно в рамках MVVM? Мне кажется что лучше выделить модель, да и я так больше запомню) Хотел ещё у Вас спросить по поводу библиотеки, класс AngleRotateConverter - класс для поворота картинки, я не очень понял для чего .Contains("ABS")) и .Contains("SIGN")) и для чего метод ConvertBack и почему так много принимает параметров метод Convert?
Потом класс BooleanToVisibilityConverter, спасибо за комменты , но если честно тоже не понял для чего он и что он конвертирует? Как я понял, можно вызывать метод Convert/ConvertBack и скрывать/показывать элемент? Ведь для видимости есть другие методы.
Класс ErrorTextConverter аналогичные вопросы)
C#
1
2
3
// ********************
                // Код подсчёта ошибок
                // ********************
Здесь что-то нужно реализовывать? Для чего этот класс и для чего его применение? Просто думал что для ошибок можно создать log.txt и записывать туда или это не для фиксации ошибок?
И класс SimpleMultiConverter из названия конечно можно догадаться, но для чего все эти конвекторы?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
06.05.2019, 10:29
Цитата Сообщение от ShmelVG Посмотреть сообщение
Хотел ещё у Вас спросить по поводу библиотеки, класс AngleRotateConverter.....
Потом класс BooleanToVisibilityConverter...
Класс ErrorTextConverter аналогичные вопросы...
Прочитайте тему "WPF конвертеры" из Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]

Если останутся вопросы - напишите.
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
06.05.2019, 10:32  [ТС]
Элд Хасп, теперь делается MainVM?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
06.05.2019, 10:36
В Вашем приложении пока нужен только AngleRotateConverter - я его специально и создавал под это приложение.

Может быть понадобится BooleanToVisibilityConverter. С ещё меньшей вероятностью SimpleMultiConverter. ErrorTextConverter делал под определённый проект - он точно не пригодится.

Они все просто находились у меня в библиотеке и я скопировал целиком библиотеку.

Добавлено через 2 минуты
Цитата Сообщение от ShmelVG Посмотреть сообщение
теперь делается MainVM?
Сначала надо создать ViewModel Data Designed - Модель представления времени разработки.
Она нужна для отладки View.

Но сейчас придётся сначала вернуться назад Мне кажется что лучше выделить модель, да и я так больше запомню. У нас нет полноценной Модели. Есть два типа для Модели, но саму Модель ещё создать надо.
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
06.05.2019, 10:43  [ТС]
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
но саму Модель ещё создать надо.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сначала надо создать ViewModel Data Designed
- подскажите как можно реализовать?

Добавлено через 27 секунд
Цитата Сообщение от Элд Хасп Посмотреть сообщение
ErrorTextConverter
- тогда этот класс можно смело удалить?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
06.05.2019, 10:49
Цитата Сообщение от ShmelVG Посмотреть сообщение
AngleRotateConverter - класс для поворота картинки
Этот конвертер позволяет получить, в зависимости от параметра, или знак числа, или его модуль.

Используется он в стиле кнопки с круговой стрелкой.
Если знак числа -1 (для этого параметр = sign), то картинка (круговая стрелка) зеркально отражается.
А в центре картинки выводится само число без знака (для этого параметр = abs).
Само же число привязывается к параметру команды и метод получит размер угла на который надо повернуть.

В результате получаем очень удобное определение для кнопок поворота. Достаточно в Content указать нужный нам угол и всё остальное происходит автоматически: стрелка поворачивается как надо, отображается размер угла и в параметр команды передаётся нужное значение.

Добавлено через 2 минуты
Цитата Сообщение от ShmelVG Посмотреть сообщение
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сначала надо создать ViewModel Data Designed
- подскажите как можно реализовать?
Да.
Но пока надо с Моделью разобраться.

Цитата Сообщение от ShmelVG Посмотреть сообщение
Цитата Сообщение от Элд Хасп Посмотреть сообщение
ErrorTextConverter
- тогда этот класс можно смело удалить?
Да.
Но я обычно это делаю уже после окончательного создания приложения.
Проверяю весь код, удаляю мусор, добавляю комменты и т.д.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
06.05.2019, 11:35
Цитата Сообщение от ShmelVG Посмотреть сообщение
- подскажите как можно реализовать?
Займёмся Mоделью:
  • Назовём её PhotoGluerModel
  • Модель у нас будет содержать только методы и закрытые поля.
  • Для сообщения в VM об изменении данных сделаем её производной от OnPropertyChangedClass.
  • Поля типа ImageModify firstImage и secondImage и методы GetFirstImage() и GetSecondImage() для получения их значений.
  • Поля типа double width и height - методы GetWidth и GetHeight
  • Поля типа double minWidth и minHeight - методы для задания значений SetMinWidth и SetMinHeight
  • Потом, возможно, дополним методами сохранения и загрузки через сериализацию/десериализацию.

Сделайте, что сможете, сами и сбросьте результат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2019, 11:35

Где располагать логику приложения, когда используем паттерн mvvm?
Изучаю wpf и паттерн mvvm. Никогда не задумывался, где что располагать, я считал (считаю пока), что представление - это пользовательский...

Склейщик
Добрый день. Моя цель сделать так называемый &quot;склейщик&quot;. На первом скрине, код моей программы. На втором пример ее работы с 1 строкой. На...

MVVM и динамическое создание контролов
У меня есть БД в MS ACCESS, в ней 10 таблиц, необходимо сделать гриды с разными контролами для заполнения и изменения полей каждой из...

MVVM и создание диалоговых окон
Приветствую вновь прибывших. В приложении нужно открыть диалоговое окно пока решил это таким способом: В VM главного окна по...

Создание интерфейса в паттерне MVVM
Доброго времени суток, есть вопрос: разрабатываю приложение с помощью данного паттерна и получается так, что в приложении в разных частях...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru