Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C# WPF [WPF] Как указать значения для колонки ListView в разметке? https://www.cyberforum.ru/ wpf-silverlight/ thread2230303.html
Всем привет, имеется listview с двумя столбиками , первый столбик содержит названия атрибутов второй их значения. Названия атрибутов постоянны поэтому первый столбик можно заполнить прямо в разметке. Никак не могу найти как это сделать.
Как сделать HamburgerMenu справа налево? C# WPF
Добрый день! Подскажите пожалуйста, как сделать Hamburg-Menu с право на лево. Нашел в интернете реализацию данного меня с лево на право, но не знаю как сделать что бы было с право на лево. <Window x:Class="VIEWnewHumberger.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ...
C# WPF Как обратиться к коллекции элементов ListBox? https://www.cyberforum.ru/ wpf-silverlight/ thread2229953.html
Вопрос следующий, у меня есть три коллекции, есть listbox, я присваиваю ему через listbox.ItemsSource? какую либо коллекцию одну из трёх, так вот, как мне теперь получить доступ к присвоенной коллекции? listbox.items? Или как? Просто мне нужно что бы управлять разными коллекциями можно было из одного элемента.
C# WPF Многопоточность для окон Есть полный набор MVVM. Используется MahApps. Программа - DLL, как ActiveX сторонней программы. Сама сторонняя программа, объект которой используется в вычислениях по команде. Сторонняя программа - STA. При попытке запустить "Progress dialog" окно виснет. Оно то и понятно почему. Вопрос: как в таком случае красиво запустить бесконечный прогресс да так, чтоб не "вешать" окно? https://www.cyberforum.ru/ wpf-silverlight/ thread2229890.html
UWP не удаляются LocalSettings после удаления приложения C# WPF
В моем UWP приложении настройки пользователя сохраняются в ApplicationData.Current.LocalSettings; Согласно документации https://docs.microsoft.com/ru-ru/windows/uwp/design/app-settings/store-and-retrieve-app-data Настройки будут удалены после удаления приложения. The system also preserves the contents of these data stores when the user installs an update to your app and removes the contents...
C# WPF Динамически изменяющиеся поля ввода https://www.cyberforum.ru/ wpf-silverlight/ thread2229343.html
или так Суть вопроса такова, можно ли как-то реализовать данные "наскальные рисунки"? Имеется 3 поля ввода, при заполнении первого, оно расширяется в зависимости от количества текста введенного в него (это известно как реализовать), но при достижении границ формы (полем ввода), съезжали остальные поля ввода и объекты следующие за ним (это известно как реализовать), после достижения границ...
C# WPF [UWP] Анимация цвета свойства Stroke Создаю UWP приложение и столкнулся с проблемой: есть контрол Rectangle нужно что бы его свойство Stroke меняло цвет с синего на красный с красного на зеленый с зеленого на желтый и вот проблема, как это сделать в xaml https://www.cyberforum.ru/ wpf-silverlight/ thread2229056.html Автоматическое выравнивание колонок ListView C# WPF
Добрый день! Есть ListView который привязан к List<T>. При добавлении значений в List новые данные отображает ListView. Данные приходят разной длинны. ListView выравнивает колонки по ширине по первой пришедшей строке. Далее колонки остаются заданной ширины, не смотря на то что новые данные могут занимать гораздо больше места. Можно ли как то динамически выравнивать ширину колонок ListView?
C# WPF Обработать нажатие колесика мыши Собственно, вопрос в заголовке: как обработать нажатие на колесико мыши? https://www.cyberforum.ru/ wpf-silverlight/ thread2228390.html C# WPF [WPF] Размер формы от шрифта и текста label и перемещение формы мышкой по label https://www.cyberforum.ru/ wpf-silverlight/ thread2228075.html
Здравствуйте. Возможно глупый вопрос но я новичек в wpf. Как там сделать размер формы в зависимости от шрифта и текста label. И как сделать перемещение формы по Label. Добавлено через 16 минут Еще возник вопрос. А есть ли аналог FontDialog в WPF или же вручную писать его. Может кто dll разработал
Глобальный стиль который дополняет остальные стили C# WPF
Привет, приведу простой пример чего я хочу. Есть кнопка. <Button Style="{StaticResource BaseButtonStyle}" Height="30" Width="150" Content="Button3"/> Есть стиль к этой кнопки. <Style x:Key="BaseButtonStyle" TargetType="{x:Type Button}"> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> <Setter Property="Background" Value="#ffffff"/>
C# WPF Библиотеки(ссылки) в указанные папки при сборке проекта https://www.cyberforum.ru/ wpf-silverlight/ thread2228039.html
Добрый день! Скажите кто знает как сделать так что бы при сборке проекта подключенные ссылки складывались в отдельные папки, а не в одну кучу? Такой код не работает.
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
23.04.2018, 16:26 0

Архитектура MVVM в многооконном приложении - C# WPF - Ответ 12332979

23.04.2018, 16:26. Показов 10178. Ответов 38
Метки (Все метки)

Ответ

Приветствую ребята! Прошу прощения что влез со своими граблями, только ради того, что бы не плодить темы. Да и сабж похож. Есть два окна (MainWindow и SecondWindow). На мейн экране кнопка. Нажав на нее нужно открыть окно и изменить запись со "Старт" на "Стоп". После закрытия снова изменить контент кнопки на "Старт". Делаю на MVVM + реализация интерфейса
ICommand
Сейчас у меня выходит запустить второе окно и изменить текст, но при закрытии окна не знаю, как снова надпись на кнопке изменить и при нажатии можно сколь угодно окон открыть. А мне нужно что бы открывалось окно один раз, пока не закроем, вызывать его запрещено. Не могу понять где флажки поставить.
Кликните здесь для просмотра всего текста

Мейн морда
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
<Window x:Class="CommandMVVM.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CommandMVVM"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <local:MainWindowViewModel x:Key="MainWindowViewModel" />
    </Window.Resources>
    <Grid DataContext="{StaticResource MainWindowViewModel}">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="30"/>
        </Grid.RowDefinitions>
 
        <Button Name="v_Button_ToggleNextWindow" Grid.Row="1" Command="{Binding StartStopCommand, Mode=OneTime}"  
                VerticalAlignment="Center" HorizontalAlignment="Center" Width="90">
            <Button.Content>
                <TextBlock Text="{Binding ButtonContent}" />
            </Button.Content>
        </Button>
 
    </Grid>
</Window>
Класс оповещения вью
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  public abstract class NotificationObject : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected virtual void NotifyPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
 
        protected void SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
        {
            if (!EqualityComparer<T>.Default.Equals(field, value))
            {
                field = value;
                NotifyPropertyChanged(propertyName);
            }
        }
    }
Класс реализации интерфеса комманды
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
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
92
93
94
95
96
97
98
99
100
  public class RelayCommand : ICommand
    {
        Action _targetExecuteMethod;
        Func<bool> _targetCanExecuteMethod;
 
        public RelayCommand(Action executeMethod)
        {
            _targetExecuteMethod = executeMethod;
        }
 
        public RelayCommand(Action executeMethod, Func<bool> canExecuteMethod)
        {
            _targetExecuteMethod = executeMethod;
            _targetCanExecuteMethod = canExecuteMethod;
        }
 
        public void RaiseCanExecuteChanged()
        {
            CanExecuteChanged(this, EventArgs.Empty);
        }
        #region ICommand Members
 
        bool ICommand.CanExecute(object parameter)
        {
            if (_targetCanExecuteMethod != null)
            {
                return _targetCanExecuteMethod();
            }
            if (_targetExecuteMethod != null)
            {
                return true;
            }
            return false;
        }
 
        // Beware - should use weak references if command instance lifetime is longer than lifetime
        // of UI objects that get hooked up to command
        // Prism commands solve this in their implementation
        public event EventHandler CanExecuteChanged = delegate { };
 
        void ICommand.Execute(object parameter)
        {
            if (_targetExecuteMethod != null)
            {
                _targetExecuteMethod();
            }
        }
        #endregion
    }
 
    public class RelayCommand<T> : ICommand
    {
        Action<T> _targetExecuteMethod;
        Func<T, bool> _targetCanExecuteMethod;
 
        public RelayCommand(Action<T> executeMethod)
        {
            _targetExecuteMethod = executeMethod;
        }
 
        public RelayCommand(Action<T> executeMethod, Func<T, bool> canExecuteMethod)
        {
            _targetExecuteMethod = executeMethod;
            _targetCanExecuteMethod = canExecuteMethod;
        }
 
        public void RaiseCanExecuteChanged()
        {
            CanExecuteChanged(this, EventArgs.Empty);
        }
        #region ICommand Members
 
        bool ICommand.CanExecute(object parameter)
        {
            if (_targetCanExecuteMethod != null)
            {
                T tparm = (T)parameter;
                return _targetCanExecuteMethod(tparm);
            }
            if (_targetExecuteMethod != null)
            {
                return true;
            }
            return false;
        }
 
        // Beware - should use weak references if command instance lifetime is longer than lifetime of 
        // UI objects that get hooked up to command
        // Prism commands solve this in their implementation
        public event EventHandler CanExecuteChanged = delegate { };
 
        void ICommand.Execute(object parameter)
        {
            if (_targetExecuteMethod != null)
            {
                _targetExecuteMethod((T)parameter);
            }
        }
        #endregion
    }
Вьюмодель основной морды
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
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 public class MainWindowViewModel : NotificationObject
    {
        SecondWindow rg; 
 
        /// <summary>
        /// Комманда для кнопки открывающей второе вью
        /// </summary>
        //private ICommand _toggleSecondViewCommand;
        //public ICommand ToggleSecondViewCommand
        //{
        //    get
        //    {
        //        return _toggleSecondViewCommand;
        //    }
 
        //    private set { }
        //}
 
        /// <summary>
        /// Надпись на кнопке
        /// </summary>
        private string _buttonContent;
        public string ButtonContent
        {
            get => _buttonContent;
            set
            {
                _buttonContent = value;
                NotifyPropertyChanged("ButtonContent");
            }
        }
 
        /// <summary>
        /// Флаг 
        /// </summary>
        private bool _IsRunning;
        public bool IsRunning
        {
            get => _IsRunning;
            set
            {
                _IsRunning = value;
                //обновление кнопки
                StartStopCommand.RaiseCanExecuteChanged();
            }
        }
 
 
        /// <summary>
        /// Кнопка запуска и останова
        /// </summary>
        private RelayCommand _StartStopCommand;
        public RelayCommand StartStopCommand
        {
            // get {return }
            get => _StartStopCommand = _StartStopCommand ?? new RelayCommand(ToggleSecondViewExecute, CanStartStop);
        }
 
        /// <summary>
        ///.ctor 
        /// </summary>
        public MainWindowViewModel()
        {
            //InitializeCommands();
        }
 
        /// <summary>
        /// Start/Stop flag
        /// </summary>
        /// <returns></returns>
        private bool CanStartStop()
        {
            if (IsRunning)
            {
                ButtonContent = "Стоп";
            }
            else
            {
                ButtonContent = "Старт";
            }
 
            return true;
        }
 
 
        private void ToggleSecondViewExecute()
        {
            Boolean windowOpened = false;
 
            if (IsRunning && rg != null)
            {
                IsRunning = false;
            }
            
            else
            {
                if (!windowOpened)
                {
 
                    windowOpened = true;
                    IsRunning = true;
                    rg = new SecondWindow();
                    rg.Show();
                    Debug.WriteLine($"IsRunning = {IsRunning} ButtonContent = {ButtonContent}");
                }
             }
        }
 
        // Deprecated
        //private void InitializeCommands()
        //{
        //    _toggleSecondViewCommand = new RelayCommand(ToggleSecondViewExecute);
        //}
    }
Вторая вью модель пока пуста.


Вернуться к обсуждению:
Архитектура MVVM в многооконном приложении C# WPF
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.04.2018, 16:26
Готовые ответы и решения:

Управление окнами в многооконном приложении
Я сейчас делаю проект с очень большим количеством форм. И мне надо сделать чтобы формы открывались...

MVVM в многовкладочном приложении
Добрый день! В моем приложении много вкладок. По сути это различные блоки одной целой программы....

Архитектура для сетевого взаимодействия в приложении
Всем новогодний привет!)) Хотел бы поинтересоваться, как кто предпочитает организовывать у себя...

В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу
Добрый день. При запуске программы выскакивает вот такая вот ошибка. В чем может быть проблема и...

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

архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников
сабж. кто чем может помочь юному,непонемающему в этой области человеку.желательно книгами.спасибо.

Время простоя в статус баре в многооконном текстовом редакторе
Помогите реализовать время простоя приложения в много оконном текстовом редакторе. Проблема...

Ошибка "в указанном dsn архитектура драйвера и архитектура приложения"
Вот такая ошибка при нажатии на кнопку &quot;Проверить соединение&quot; Я прочитал, что это возможно из за...

Код который работает в консольном приложении в приложении Windows Forms выдает ошибку
Есть код для записи видео с экрана. В консольном приложении он работает, записывает все как нужно....

0
Новые блоги и статьи
Создание макробота, как способа экономии времени и варианта ИИ.
Hrethgir 28.01.2025
Чисто теоретически, создание ИИ на ПК можно разделить на части. Создать бота отвечающего за железо (эмулирование вкл, выкл, мышь, клавиатура), другой бот осуществляет распознавание изображений,. . .
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru