Форум программистов, компьютерный форум, киберфорум
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. Показов 9794. Ответов 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, 18:52  [ТС]
Студворк — интернет-сервис помощи студентам
на картинке содержимое кнопки чуть не соотвествует описанию .Но в общих чертах должно быть понятно.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 18:59
Цитата Сообщение от Berendom Посмотреть сообщение
И соответственно (немало здесь копий сломано ), Background "зеленеет" не по "фэйковому" пути, а по пути реальной обратной связи, например от чекбокса.
Вот поэтому и возникает ЧЕТЫРЕ состояния, а не два.
А вы реализует два - что естественно вызывает не стыковку.

Исходное исправное состояние:
"Выкл." и "Не работает" - цвет белый. С этим всё ясно.

Рабочее исправное состояние:
"Вкл." и "Работает" - цвет зелёный. С этим всё ясно.

Эти два рабочих состояния уже давно реализованы и корректно работают.

Теперь неисправные состояния:
"Вкл." и "Не работает" - цвет? Если белый, то как его отличить от состояния "Выкл." и "Не работает"?
"Выкл." и "Работает" - цвет? если зелёный, то как его отличить от состояния "Вкл." и "Работает"?

А ещё имеем и несколько переходных состояний:
Был "Вкл." и "Не работает" - заработал.
Был "Вкл." и "Не работает" - выключили.
И другие.

Добавлено через 26 секунд
Цитата Сообщение от Berendom Посмотреть сообщение
на картинке содержимое кнопки чуть не соотвествует описанию
На какой картинке?
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 19:20  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Исходное исправное состояние:
"Выкл." и "Не работает" - цвет белый. С этим всё ясно.
Отлично что ясно.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Рабочее исправное состояние:
"Вкл." и "Работает" - цвет зелёный. С этим всё ясно.
я бы не сказал, что работает.

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

Вы какой код смотрите?
Код который в репе - в нём зелёный включается CheckBox'ом.
Кнопка только включает анимацию движения транспортёра..
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 20:00  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы какой код смотрите?
я еще не смотрел, вы что-то изменили?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 20:07
Цитата Сообщение от Berendom Посмотреть сообщение
я еще не смотрел, вы что-то изменили?
Я же написал вам в #115:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Berendom, отправил фиксацию:
Вариант с независиммым управлением движением конвеера и индикации кнопки.
Добавлено через 3 минуты
Berendom, о картинка появилась в #120.
Похоже Форум подтормаживает.

Для такой логики (как в картинке), наверное, лучше не привязываться к IsChecked, а посылать команду по клику.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 20:14  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для такой логики (как в картинке), наверное, лучше не привязываться к IsChecked, а посылать команду по клику.
пробовал через event trigger и команду так делать.


Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я же написал вам в #115:
так не видел, форум глючит!

TextBlock в ToggleButon это оригинально. Проверим.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 20:48
Berendom, ещё один вариант.
Фиксация d8107b22:
Реализация с командой включения-отключения конвейере. В переключателе реализовано визуализация его состояния (вверх-вниз) и индикации работы конвейера.
Цитата Сообщение от Berendom Посмотреть сообщение
TextBlock в ToggleButon это оригинально.
Так я вам сколько за это пишу!
Это не "оригинально", а типовая для WPF реализация.
Наиболее часто используется в UserControl'е.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 21:23  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это не "оригинально", а типовая для WPF реализация.
Создаю другую кнопку с текстбоксом внутри. Но Текстбокс не выводит контент. Что за фигня... Что упускаю?

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
 <ToggleButton
                Margin="10"
                Padding="0"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                BorderThickness="0">
                <TextBox
                    Padding="195"
                    IsHitTestVisible="False"
                    IsReadOnly="True">
                    <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>
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 21:39
Цитата Сообщение от Berendom Посмотреть сообщение
Создаю другую кнопку с текстбоксом внутри. Но Текстбокс не выводит контент. Что за фигня... Что упускаю?
Здесь всё Ок.
Ошибка где-то в другом месте.
Может шаблон по умолчанию переопределили?

Добавлено через 2 минуты
Цитата Сообщение от Berendom Посмотреть сообщение
Padding="195"
С таким Padding у вас общего размера кнопки хватает?
Если размер меньше чем 400х400, то места для вывода содержимого не будет.

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

Пост #128:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Фиксация d8107b22:
Реализация с командой включения-отключения конвейере. В переключателе реализовано визуализация его состояния (вверх-вниз) и индикации работы конвейера.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 21:56  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы, вообще, мои посты читаете?
конечно! И с кодом разбираюсь! Ваши посты , также как и моя картинка...

Вопрос. Content ТекстБокса можно погрузить во ViewBox?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 22:07
Цитата Сообщение от Berendom Посмотреть сообщение
Content ТекстБокса можно погрузить во ViewBox?
Конечно.
Любой UI элемент можно.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
21.11.2021, 22:13  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Любой UI элемент можно.
а как?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
21.11.2021, 22:28
Цитата Сообщение от Berendom Посмотреть сообщение
а как?
ViewBox принимает любой UI элемент.
В чём проблема у вас?
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
22.11.2021, 11:33  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
ViewBox принимает любой UI элемент.
В чём проблема у вас?
да порешал уже таким образом, в рамках ToggleButton, текстбокс целиком засунул во ViewBox и убрал у ТекстБокс ,бордер BorderThikness=0.

За счет этого заполнение кнопки текстом стало приемлемым.


Разбираюсь с вашей посл. фиксацией.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
22.11.2021, 11:34
Цитата Сообщение от Berendom Посмотреть сообщение
За счет этого заполнение кнопки текстом стало приемлемым.
Padding=195 оставили?
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
22.11.2021, 11:53  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Padding=195 оставили?
убрал вообще.




Тут нюанс такой.Не знаю поймете ли о чем я рассказываю.

Предпоследняя фиксация. Где еще стандартная горизонтальная кнопка.

Когда обратная связь дает false, тестбокс "белеет" как и задумано. Но Tooglebutton об этом не знает. И нужно дважды нажимать, чтобы перезапустить. 1 раз сбросить togglebuton, второй уже включить.

Попробовал так, подключив к обр.связи.
XML
1
IsChecked={Binding IsConveyorRunning, Mode=OneWayToSource}
, а включение объекта сделал через команду.

Похоже Togglebutton игнорирует сброс в исходное положение.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
22.11.2021, 12:09
Цитата Сообщение от Berendom Посмотреть сообщение
Но Tooglebutton об этом не знает. И нужно дважды нажимать, чтобы перезапустить. 1 раз сбросить togglebuton, второй уже включить.
Да.
Я же вам поэтому и пишу: "Опишите детально ФИЗИЧЕСКОЕ устройство, которое надо эмитировать".
Данная реализация эмитирует "Физический тумблер с подсветкой", который при переключении вверх включает линию команды "Включить конвейер", вниз - "Отключить конвейер".
А подсветка индикатора привязана по отдельной линии к датчику работы конвейера.

Цитата Сообщение от Berendom Посмотреть сообщение
Попробовал так, подключив к обр.связи.
Просто наугад?

Ещё раз пишу: Разделяйте ЛОГИКУ и Визуальное представление элемента.
Просто наугад бухать что-то куда-то не выйдет.

Добавлено через 2 минуты
Вот представьте себе электрический щиток управления конвейером.
Опишите какие на нём должны быть органы управления и индикаторы.
Именно ФИЗИЕСКИЙ, реальный щиток управления, а не GUI.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.11.2021, 12:09

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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