Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/39: Рейтинг темы: голосов - 39, средняя оценка - 4.64
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376

Рисую линию без MVVM все ОК. C MVVM произвольный старт

30.10.2021, 12:59. Показов 9695. Ответов 148
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем.

Рисую линию при помощи анимации. Все получилось -рисуется, стирается.
Но у нас все задания с MVVM, чтобы ViewModel была
Хорошо добавил MVVM light, ViewModel создал, свойства, команду.

Блин, при запуске окна начала автоматически рисоваться линия.
Вообще должна с кнопки, как было ранее и планируется.

Как такое может быть, если никто и ничто не воздействует на свойство и должно быть false?
Или она сама по себе запускается. Так вся разница между двумя проектами - МVVM.

Xaml.

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
  <Window.Resources>
        <Storyboard x:Key="Storyboard.Draw2" x:Name="BeginStoryboardDraw2">
            <DoubleAnimation
                Storyboard.TargetProperty="X2"
                From="0"
                To="282"
                Duration="0:0:5" />
            <DoubleAnimation
                Storyboard.TargetProperty="Y2"
                From="0"
                To="11"
                Duration="0:0:5" />
        </Storyboard>
 
        <Storyboard x:Key="Storyboard.Erase2" x:Name="BeginStoryboardErase2">
            <DoubleAnimation
                Storyboard.TargetProperty="X1"
                From="0"
                To="282"
                Duration="0:0:5" />
            <DoubleAnimation
                Storyboard.TargetProperty="Y1"
                From="0"
                To="11"
                Duration="0:0:5" />
        </Storyboard>
    </Window.Resources>
 
    <Grid>
        <Canvas>
 
            <Line
                Name="MyLine3"
                Canvas.Left="100"
                Canvas.Top="100"
                Stroke="LimeGreen"
                StrokeThickness="6">
               
                <Line.Style>
                    <Style>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Animation_enable}" Value="true">
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard x:Name="BeginStoryboardDraw2" Storyboard="{StaticResource Storyboard.Draw2}" />
                                </DataTrigger.EnterActions>
                                <DataTrigger.ExitActions>
                                   
                                </DataTrigger.ExitActions>
                            </DataTrigger>
 
                            <DataTrigger Binding="{Binding Animation_enable}" Value="false">
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard x:Name="BeginStoryboardErase2" Storyboard="{StaticResource Storyboard.Erase2}" />
                                </DataTrigger.EnterActions>
                                <DataTrigger.ExitActions>
                                    <StopStoryboard BeginStoryboardName="BeginStoryboardErase2" />
                                </DataTrigger.ExitActions>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Line.Style>
            </Line>
 
        </Canvas>
 
        <Button
            Width="60"
            Height="20"
            Command="{Binding Launch_animation_command}"
            Content="Рисовать" />
 
</Grid>


VieModel

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 // Animation enable
 
        public bool Animation_enable
        {
            get { return _animation_enable; }
            set { Set(ref _animation_enable, value); }
        }
        private bool _animation_enable;
 
 
 
        // Command
        public ICommand Launch_animation_command { get; private set; }
 
 
        public MainWindowViewModel()
        {
 
            Launch_animation_command = new RelayCommand(LaunchAnimation);
 
 
        }
 
 
 
        // Method
        private void LaunchAnimation()
        {
 
 
            if (!Animation_enable)
            {
 
                Animation_enable = true;
 
            }
 
            else if (Animation_enable)
 
            {
 
 
               Animation_enable = false;
 
            }
 
 
 
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2021, 12:59
Ответы с готовыми решениями:

Доступ к View без нарушения правил MVVM
Здравствуйте, дорогие форумчане. Я недавно начал изучать MVVM. Вот недавно столкнулся с одной проблемой: как мне , допустим, создать...

Привязка данных без использования паттерна MVVM
Здраствуйте, интересует вопрос как сделать такую привязку. Имеется класс Game.cs: class Game: DependencyObject { ...

MVVM
Здравствуйте, я в среде WPF нахожусь очень мало, посмотрел книжки, решил читать Мэтью Макдональда, стоит ли мне сразу изучать MVVM или...

148
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 15:26  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Неужели изменить одно свойство в готовом коде сложно?
XML
Признаю мы тупые, но не настолько, что не видим или не можем.

Попробую все сначала, Nguen, давай тоже учавствуй, я уже "забодался" за всех отдуваться. Списать не дам!



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
<ToggleButton x:Name="toggleButton"
                          Margin="10" Padding="0"
                          BorderThickness="0"
                          HorizontalAlignment="Center"
                          VerticalAlignment="Center"
                          IsChecked="{Binding IsConveyorRunning}">
                <TextBox IsReadOnly="True" 
                         Padding="15,5"
                         IsHitTestVisible="False">
                    <TextBox.Style>
                        <Style TargetType="TextBox">
                            <Setter Property="Background" Value="WhiteSmoke"/>
                            <Setter Property="Text" Value="Конвейер Cтарт" />
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsConveyorRunning}" Value="True">
                                    <Setter Property="Text" Value="Конвейер Стоп" />
                                    <Setter Property="Background" Value="LightGreen"/>
                                    <Setter Property="BorderBrush" Value="Green"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBox.Style>
                </TextBox>
            </ToggleButton>


Этот код 1: где и в IsChecked и в DataTrigger используется одно и то же свойство IsConveyorRunning нас не устраивает.
Точнее нашего препода не устраивает, т.к. нарушает... (не будем углубляться).


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
<ToggleButton x:Name="toggleButton"
                          Margin="10" Padding="0"
                          BorderThickness="0"
                          HorizontalAlignment="Center"
                          VerticalAlignment="Center"
                          IsChecked="{Binding Conveyor_On}">
                <TextBox IsReadOnly="True" 
                         Padding="15,5"
                         IsHitTestVisible="False">
                    <TextBox.Style>
                        <Style TargetType="TextBox">
                            <Setter Property="Background" Value="WhiteSmoke"/>
                            <Setter Property="Text" Value="Конвейер Cтарт" />
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsConveyorRunning}" Value="True">
                                    <Setter Property="Text" Value="Конвейер Стоп" />
                                    <Setter Property="Background" Value="LightGreen"/>
                                    <Setter Property="BorderBrush" Value="Green"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBox.Style>
                </TextBox>
            </ToggleButton>

Этот код 2:

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

В этом варианте, теперь включение конвейера и Background (обратная связь) разведены. Что не нарушает концепции... (не будем углубляться)


Теперь.Элд Хасп, Если так ToggleButton не может работать (нарушаются всякие там концепции WPF), то значит это контрол не подходит для решения тех технических задач, что нам поставили. Значит мы ошиблись при его выборе.
И наверное нам нужен какой-то специфический UC.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 15:33
Цитата Сообщение от Berendom Посмотреть сообщение
Этот код 2:
Так он работает так как вам нужно или нет?
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 15:48  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Так он работает так как вам нужно или нет?
Через раз работает, той четкости срабатывания нет. Чисто по ощущениям эта "работа" не для togglebutton.
визуально да, togglebutton больше подходит чем просто button. Поэтому на нее и накинулись.
Но она похоже не "любит" менять BackGround по сигналу приходящему из модели, она "любит" быть завязанной сама на себя.

Просим помощи!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 15:50
Цитата Сообщение от Berendom Посмотреть сообщение
Через раз работает, той четкости срабатывания нет
Объясните детальнее.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 15:51  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Объясните детальнее.
схемку нарисую.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 15:55
Berendom, специально сейчас тестировал - я не смог добиться срабатывания через раз.
Может у что-то в логике хромает?
Как у вас связанны два свойства IsConveyorRunning и Conveyor_On ?
Может проблема в Модели?
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 16:11  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Может проблема в Модели?
какая там может быть проблема,

я добавил чекбокс
XML
1
 <CheckBox Content="Датчик движ."  Canvas.Left="808" Canvas.Top="42" IsChecked="{Binding IsConveyorRunning}"/>
После нажатия кнопки, нажмите чекбокс типа feedback поступила и увидите какя ерунда получается.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 16:14
Цитата Сообщение от Berendom Посмотреть сообщение
я добавил чек бокс
Куда вы его добавили?

Где ваши коды?

В репе ничего нет.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 16:17  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В репе ничего нет.
как сделать только изменения? не перегружать весь проект?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 16:53
Цитата Сообщение от Berendom Посмотреть сообщение
как сделать только изменения? не перегружать весь проект?


Добавлено через 23 минуты
Berendom, в крайнем случае создайте архив и перешлите его сюда.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 16:54  [ТС]
Элд Хасп,

у меня на это г...но гитовское просто слов не находится. Если оно заработало, то тебе повезло.
Если где-то изначально споткнулось, все...

вроде как отправляет, проверяю на гитхубе, все по прежнему.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 16:58  [ТС]
здесь.
Вложения
Тип файла: zip ConveyorMaterialAnimationEH.zip (2.35 Мб, 2 просмотров)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 17:12
Цитата Сообщение от Berendom Посмотреть сообщение
здесь.
Залил на гит.

Добавлено через 43 секунды
Цитата Сообщение от Berendom Посмотреть сообщение
вроде как отправляет, проверяю на гитхубе, все по прежнему.
Можно соединиться по TeamViwer - покажу как пользоваться.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 17:17  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Залил на гит.
вижу. не буду трогать, а то сломаю еще чего.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 17:29
1) Berendom, я вам уже раз пять написал, что не нужно использовать триггер для управления Background, а вы всё равно его пихаете туда и удивляетесь, что он не работает.
Как вам ещё объяснить, что это не правильно и так работать не будет?

2) В вашем коде нет никакой зависимости между свойствами Conveyor_On и IsConveyorRunning. Это просто два независимых свойства. Так и должно быть?

Добавлено через 3 минуты
Berendom, отправил фиксацию:
Вариант с независиммым управлением движением конвеера и индикации кнопки.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 17:30  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
1) Berendom, я вам уже раз пять написал, что не нужно использовать триггер для управления Background, а вы всё равно его пихаете туда и удивляетесь, что он не работает.
Как вам ещё объяснить, что это не правильно и так работать не будет?
ну так значит togglebutton не подходит. Об этом уже точно два раза писалось.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
2) В вашем коде нет никакой зависимости между свойствами Conveyor_On и IsConveyorRunning. Это просто два независимых свойства. Так и должно быть?
Ну да, это азы автоматизации, о чем писал Ахромчон и говорит преподаватель. Зависимость есть, она где-то там "за моделью".
Здесь просто все руками делается, в чекбоксе.


Вам картинку прислать?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 17:41
Цитата Сообщение от Berendom Посмотреть сообщение
ну так значит togglebutton не подходит. Об этом уже точно два раза писалось.
WPF элементы выбираются по логике.
ToggleButton - реализует логику "Переключатель", "Тумблер".

Оффлайн пример.

У вас на щитке управления конвейера находится тумблер включения конвеера.
Положение вверх - "вкл", вниз - "выкл".

Вы перевели его в положение вверх.
Но оказалось, что провод оборван и конвейер не включился.

Теперь вопрос: В каком положении находится тумблер? Вверх или вниз?
Вот так же и ToggleButton - он должен отображать СВОЁ состояние, а то что конвейер "не запустился" должно отображаться отдельной "лампочкой возле тумблера".

Вот попробуйте описать как вы видите управление в реале конвейером, какие тумблеры кнопки должны быть на щитке, какие индикаторы.
И тогда можно подумать как это реализовать.
А то сейчас вы не Модель хотите съэмитировать, а просто "чтобы что-то там было, а что именно... чёрт его знает".
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 17:50  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вот так же и ToggleButton - он должен отображать СВОЁ состояние, а то что конвейер "не запустился" должно отображаться отдельной "лампочкой возле тумблера".
Значит нужен UC.


Таких кнопок полно в авионике, например, на ЖК дисплеях.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 18:24
Цитата Сообщение от Berendom Посмотреть сообщение
Таких кнопок полно в авионике, например, на ЖК дисплеях.
Каких "таких"?
Последние полсотни постов я это и пытаюсь от вас выясните.

Опишите ФИЗИЧЕСКОЕ устройство, которые вы хотите эмитировать.

Добавлено через 6 минут
При раздельных "Включить" (Conveyor_On) и "Работает" (IsConveyorRunning) мы визуально можем иметь 4 состояния.
Объясните как визуально представить все эти четыре (а не ДВА!) состояния.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 18:46  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Каких "таких"?
Исходное состояние:
Content= "Вкл". Background="WhiteSmoke"

После того как ее ткнули (тапнули):
Content = "Выкл", Background ="Green".

И соответственно (немало здесь копий сломано ), Background "зеленеет" не по "фэйковому" пути как в togglebutton, а по пути реальной обратной связи, например от чекбокса.

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

Mvvm
Форумчане помогите разобраться есть простенькая модель public partial class Category:ViewModelBase { private int...

MVVM
Добрый день! Пытаюсь написать программу в стиле MVVM. Вопрос такой: как передать SelectedItem TreeView из xaml с помощью Binding в...

MVVM
Объясните пожалуйста следующие строки 1)Представление является подписчиком на событие изменения значений свойств или команд,...

x:Name в MVVM
Добрый день, как обращаться к объектам из VM по их x:Name? Например, у меня есть канвас в который я докидываю картинки по нажатию...

MVVM: модель?
Что это вообще такое в рамках реализации тонкого клиента? Полное текущее состояние клиентского приложения? Серверная часть не...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru