Форум программистов, компьютерный форум, киберфорум
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. Показов 9789. Ответов 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
22.11.2021, 12:35  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Просто наугад?
почему наугад, на основе своего понимания работы ToggleButton.

1.Последнее состояние кнопки "включена".
2. Свойство IsChecked сбрасывается извне как уже писал ранее.

XML
1
IsChecked={Binding IsConveyorRunning, Mode=OneWayToSource}
3. По идее должна перейти исходное состояние "по свойству", а не от руки. Чего не происходит.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
22.11.2021, 12:47
Цитата Сообщение от Berendom Посмотреть сообщение
почему наугад, на основе своего понимания работы ToggleButton.
Потому, что такая привязка задаёт направление "от цели (от кнопки) к свойству (IsConveyorRunning)".
Вам же, с ваших слов, не нужна прямая зависимость этого свойства от кнопки.
Она должна проходит через "физическую модель".

Цитата Сообщение от Berendom Посмотреть сообщение
3. По идее должна перейти исходное состояние "по свойству", а не от руки. Чего не происходит.
Вы опять пытаетесь объяснить терминами GUI, а из-за недостаточного понимания работы логики и представления, вы только запутываете меня.

То есть вам надо представить "Физический защитный автомат с подсветкой".
Его включил - линия работает и он подсвечивается.
Произошла авария (линия перестала работать) - он вырубился и перестал светиться.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
22.11.2021, 12:53  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Потому, что такая привязка задаёт направление "от цели (от кнопки) к свойству (IsConveyorRunning)".
если в default.

вы же видете, что я сделал(пишу) Mode=OneWayToSource? По идее должно сбрасывать кнопку.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
22.11.2021, 12:57
Цитата Сообщение от Berendom Посмотреть сообщение
вы же видете, что я сделал Mode=OneWayToSource?
Вижу.
И это неверно.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
То есть вам надо представить "Физический защитный автомат с подсветкой".
Ели я верно угадал, то Фиксация 90f2e64a:
Реализация "Защитный автомат включения конвейера".
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
22.11.2021, 13:08  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вижу.
И это неверно.
Очень много людей (далеко не начинающие, как я) считают, что это логично и верно, но не работает как надо.
Прооблема WPF версий, Винды и т.д.
И все делают костыли по этой проблеме, у каждого свой.
Наберите в google "WPF togglebutton binding mode TwoWays, OneWayToSource doesn't work" вам вывалится несколько десятков совпадений и это только на StackOverflow.

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

Цитата Сообщение от Berendom Посмотреть сообщение
Прооблема WPF версий, Винды и т.д.
Никаких проблем нет.
Есть проблемы только с непониманием и нехваткой знаний.

Цитата Сообщение от Berendom Посмотреть сообщение
Наберите в google "WPF togglebutton binding mode TwoWays, OneWayToSource doesn't work" вам вывалится несколько десятков совпадений и это только на StackOverflow
Зачем мне искать ссылки на НЕ ВЕРНОЕ Решение?
Да, я найду множество неверных решений, но зачем они мне?

Вы сами себе придумали как неправильно хотите реализовать, потом ищите ссылки на такие неправильные решения и удивляетесь что они не работают.
Где логика?

Цитата Сообщение от Berendom Посмотреть сообщение
нет. там где горизонтальная кнопка.
Я так и не понял что вам нужно реализовать.
Каждый раз приходится действовать по догадке.

Ответьте:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вот представьте себе электрический щиток управления конвейером.
Опишите какие на нём должны быть органы управления и индикаторы.
Именно ФИЗИЕСКИЙ, реальный щиток управления, а не GUI.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
22.11.2021, 13:36
Лучший ответ Сообщение было отмечено Berendom как решение

Решение

Цитата Сообщение от Berendom Посмотреть сообщение
там где горизонтальная кнопка.
Там был баг с анимацией.
Исправил его.
Фиксация bb113673:
Убрано свойство Conveyor_On. Востановлена зависмость анимации от свойства IsConveyorRunning.
0
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
22.11.2021, 17:40  [ТС]
Элд Хасп,

в последнем, вот эта метода, что вы используете

XML
1
2
 Command="{Binding OnOffConveyorCommand, Mode=OneWay}"
                          CommandParameter="{Binding IsChecked, RelativeSource={RelativeSource Self}}">

C#
1
2
3
4
5
6
7
8
9
10
public RelayCommand<bool> OnOffConveyorCommand => _onOffConveyorCommand
            ?? (_onOffConveyorCommand = new RelayCommand<bool>(OnOffConveyorExecute));
 
        /// <summary>Метод включения-выключения конвейера.</summary>
        /// <param name="obj"></param>
        private void OnOffConveyorExecute(bool isTurnOn)
        {
            MessageBox.Show($"Команда \"{(isTurnOn? "Включить":"Выключить")} ковейер\".");
            IsConveyorRunning = isTurnOn;
        }
будет работать с обычной togglebutton?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
22.11.2021, 18:00
Цитата Сообщение от Berendom Посмотреть сообщение
будет работать с обычной togglebutton?
Отправка команды - да.
Изменение фона для состояния IsChecked=true - нет.

Добавлено через 7 минут
Если вам нужно в команде только инвертирование IsConveyorRunning, то можно попробовать использовать обычный Button с такой привязкой
XML
1
 Command="{Binding OnOffConveyorCommand, Mode=OneWay}">
И такой командой:

C#
1
2
3
4
5
6
7
8
9
10
public RelayCommand OnOffConveyorCommand => _onOffConveyorCommand
            ?? (_onOffConveyorCommand = new RelayCommand(OnOffConveyorExecute));
 
        /// <summary>Метод включения-выключения конвейера.</summary>
        private void OnOffConveyorExecute()
        {
            bool isTurnOn = ! IsConveyorRunning;
            MessageBox.Show($"Команда \"{(isTurnOn? "Включить":"Выключить")} конвейер\".");
            IsConveyorRunning = isTurnOn;
        }
В Button вы можете через триггер менять цвет фона, поскольку в ней не используется состояние IsChecked=true.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.11.2021, 18:00

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

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

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

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

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


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

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