Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 25.03.2020
Сообщений: 10
WPF

WPF команды

14.04.2021, 16:11. Показов 3413. Ответов 22

Студворк — интернет-сервис помощи студентам
Подскажите почему не работают команды, что я сделал не так
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
// viewModel
public class MainVM: INotifyPropertyChanged
    {
        public string Text { get; set; }
        
 
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName] string prop = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
        }
 
 
        private RelayCommand login;
        public RelayCommand Login
        {
            get
            {
                return login ??= new RelayCommand(obj =>
                {
                    Window window = obj as Window;
                    LogIn();
                    window.Close();
                });
            }
        }
        public void LogIn()
        {
            ProjectNUWMDBContext context = new();
            if (context.Users.FirstOrDefault().Name == Text)
            {
                
 
            }
        }
    }
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
using System;
using System.Windows.Input;
 
namespace ProjectNUWM.Aplication.ViewModel
{
    public class RelayCommand
    {
        private Action<object> execute;
        private Func<object, bool> canExecute;
 
        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
 
        public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
        {
            this.execute = execute;
            this.canExecute = canExecute;
        }
 
        public bool CanExecute(object parameter)
        {
            return this.canExecute == null || this.canExecute(parameter);
        }
 
        public void Execute(object parameter)
        {
            this.execute(parameter);
        }
    }
}
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
<Window
        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:ProjectNUWM.Aplication.View"
        xmlns:ViewModel="clr-namespace:ProjectNUWM.Aplication.ViewModel"
        x:Class="ProjectNUWM.Aplication.MainWindow"
        mc:Ignorable="d"
        ResizeMode="CanMinimize"
        Height="250"
        Width="700"
        WindowStartupLocation="CenterScreen"
        Name="WindName">
    <Window.DataContext>
        <ViewModel:MainVM/>
    </Window.DataContext>
    <Grid HorizontalAlignment="Center" VerticalAlignment="Stretch" MinWidth="700" >
        <Border VerticalAlignment="Stretch">
            <StackPanel Height="Auto" Width="Auto">
                <Border Background="#256589">
                    <TextBlock x:Name="TextName" Text="Вхід" FontSize="70" 
                               Foreground="White" HorizontalAlignment="Center" Height="Auto" Width="Auto"/>
                </Border>
                <Grid Margin="5" Height="Auto" Width="Auto">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Text="Ім'я" FontSize="50" HorizontalAlignment="Stretch" 
                               Foreground="#256589" Height="Auto" Width="Auto"/>
                    <TextBox Grid.Column="1" HorizontalAlignment="Stretch" Margin="15" 
                             FontSize="30"  x:Name="LoginTextBox" Text="{Binding Text}"/>
                </Grid>
                <Button Content="Увійти" FontSize="20" HorizontalAlignment="Center" 
                        Foreground="#256589" BorderBrush="White" Background="White"
                        Command="{Binding Login}"
                        CommandParameter="{Binding ElementName=WindName}"/>
            </StackPanel>
        </Border>
    </Grid>
</Window>
Добавлено через 4 часа 50 минут
Уже решил вопрос с командами! Нужно было реализовать ICommand, но появился второй вопрос. Как улучшить этот код?
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
 public string Text { get; set; }
 
        private RelayCommand login;
        public RelayCommand Login
        {
            get
            {
                return login ??= new RelayCommand(obj =>
                {
                    Window window = obj as Window;
                    LogIn(window);
                });
            }
        }
        public void LogIn(Window thisWindow)
        {
 
            User name = new AuthorizationServices().FindUserByName(Text);
            if (name != null)
            {
                new Window()
                {
                    Content = new MainPage()
                }.Show();
                thisWindow.Close();
            }
            else
            {
                MessageBox.Show("Користувача не існує", "Помилка");
            }
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2021, 16:11
Ответы с готовыми решениями:

WPF команды и MVVM. Часть 2. Всплытие команд. Реализация команды для списка элементов [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html На практике часто встречаются случаи когда команда и кнопка...

WPF команды и MVVM. Часть 1. [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html Для использования и создания WPF команд в Net предусмотрен...

WPF.MVVM и команды
Доброго дня. При изучении команд в MVVM столкнулся с проблемой включения и отключения. есть свойство и две команды public class...

22
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
16.04.2021, 18:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Не так.
Это именно слой.
У него своя отдельная функциональность намного превосходящая возможности View.
Значит в моём случае это будет так (хотя, для начала надо разобраться как вообще отделить эту логику от VM без чрезмерного усложнения):
1. Общая часть App-логики, которая не имеет зависимостей от конкретной платформы (отдельная сборка).
2. Платформозависимая часть App-логики (отдельная сборка). Минимизирована настолько, насколько возможно. Это самый-самый верхний уровень.
3. Платформозависимая часть View (разметка, стили, конвертеры).
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
16.04.2021, 18:50
Цитата Сообщение от kotelok Посмотреть сообщение
Значит в моём случае это будет так
Это уже ближе к истине.
Только в третьем пункте не только Платформозависимая часть View, в все платформозависимые модули.
Они могут быть в любом слое приложения.

Добавлено через 2 минуты
В вашем случае, возможно, они есть только в View.
Но, допустим, работа с файловой системой тоже может быть разной на разных платформах.
Или доступ к каким-то физическим устройствам.
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
16.04.2021, 19:06
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Только в третьем пункте не только Платформозависимая часть View, в все платформозависимые модули.
Да, но это уже 4-й модуль, который зависит от платформы, но не является частью логики конкретного приложения. Это отдельная платформозависимая сборка, где находится реализация общего функционала (показ стандартного, для данной платформы, мессаджбокса, окно выбора файла, работа с реестр или эмуляция оного и т.п.).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2021, 19:06

Команды WPF - в чём смысл
Объясните, пожалуйста, Закрепление материала  В чем преимущества использования команд?  Как ведут себя команды, размещенные в...

Команды в WPF (ListBoxItem.Selected)
Изучаю WPF недавно. Дошёл до до WPF команд. Читаю-читаю и что по мере чтения в голове только каша увеличивается. Помогите, на примере...

Изменение горячих клавиш команды WPF
Есть простое тестовое приложение WPF - один пункт меню, одна кнопка, одна надпись (Label), и одна команда с обработчиком из стандартного...

Привязка команды к кнопке внутри ListBox WPF
Есть разметка Xaml: &lt;Window x:Class=&quot;WpfApp1.MainWindow&quot; ...

Как разбить WPF, MVVM по проектах? Пример команды
добрый день, я делаю большой проект на WPF с использованием паттерна MVVM. как мне его правильно разбить по проектам в VisualStudio? я так...


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

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