Форум программистов, компьютерный форум, киберфорум
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. Показов 10019. Ответов 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,176
Записей в блоге: 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,176
Записей в блоге: 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,176
Записей в блоге: 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,176
Записей в блоге: 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,176
Записей в блоге: 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,176
Записей в блоге: 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,176
Записей в блоге: 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,176
Записей в блоге: 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,176
Записей в блоге: 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,176
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru