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

Решил переделать проект используя MVVM, но binding видимо не мое и я не могу найти ошибку

15.12.2021, 23:13. Показов 2198. Ответов 21

Студворк — интернет-сервис помощи студентам
У меня был проект который по Url картинки качал ее и выводил в image, после того как я попытался перенести его в mvvm он сломался и просто ничего не делает(ошибки не выводит), проблема очевидно в биндах и том что я все слегка сломал пока их пытался сделать. Помогите решить проблему.
код класса ниже
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
 internal class MainViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler? PropertyChanged;
        string tb1;
        public string Tb1
        {
            get { return tb1; }
            set
            {
                tb1 = value;
                OnPropertyChanged("Tb1");
            }
        }
        string tb2;
        public string Tb2
        {
            get { return tb2; }
            set
            {
                tb2 = value;
                OnPropertyChanged("Tb2");
            }
        }
        string tb3;
        public string Tb3
        {
            get { return tb3; }
            set
            {
                tb3 = value;
                OnPropertyChanged("Tb3");
            }
        }
        WebClient web = new WebClient();
        int choice = 0;
        private Command addCommand;
        public Command AddCommand
        {
            get
            {
                return addCommand ??
                  (addCommand = new Command(obj =>
                  {
                      DownloadImage(String.Copy(tb1), "output.jpg");
                      choice = 1;
                  }));
            }
        }
        private Command addCommand1;
        public Command AddCommand1
        {
            get
            {
                return addCommand1 ??
                  (addCommand1 = new Command(obj =>
                  {
                      DownloadImage(String.Copy(tb2), "output1.jpg");
                      choice = 2;
                  }));
            }
        }
        private Command addCommand2;
        public Command AddCommand2
        {
            get
            {
                return addCommand2 ??
                  (addCommand2 = new Command(obj =>
                  {
                      DownloadImage(String.Copy(tb3), "output2.jpg");
                      choice = 3;
                  }));
            }
        }
        int barProgress;
        private Command addCommand3;
        public Command AddCommand3
        {
            get
            {
                return addCommand3 ??
                  (addCommand3= new Command(obj =>
                  {
                      web.CancelAsync();
                      barProgress = 0;
                  }));
            }
        }
        public void OnPropertyChanged([CallerMemberName]string prop = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));  
        }
        private void OnDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            barProgress = e.ProgressPercentage;
        }
        private void DownloadImage(string url, string fileName)
        {
            
            web.DownloadFileCompleted += OnDownloadFileCompleted;
            web.DownloadProgressChanged += OnDownloadProgressChanged;
            web.DownloadFileAsync(new Uri(url), fileName);
        }
        private void OnDownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            var projectName = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
            switch (choice)
            {
                case 1:
                    Task.Factory.StartNew(() =>
                    {
                        var imagePath = projectName + "\\output.jpg";
                        var img1 = new Uri(imagePath);
                    });
                    break;
                case 2:
                    Task.Factory.StartNew(() =>
                    {
                        var imagePath1 = projectName + "\\output1.jpg";
                        var img2 = new Uri(imagePath1);
                    });
                    break;
                case 3:
                    Task.Factory.StartNew(() =>
                    {
                        var imagePath2 = projectName + "\\output2.jpg";
                        var img3 = new Uri(imagePath2);
                    });
                    break;
            }
        }
        private int _Clicks;
        public int Clicks
        {
            get { return _Clicks; }
            set
            {
                _Clicks = value;
                OnPropertyChanged();
            }
        }
    }
код MainXaml:
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.Resources>
        <Style TargetType="Button">
            <Setter Property="Height" Value="30"/>
            <Setter Property="Margin" Value="15"/>
        </Style>
    </Window.Resources>
 
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="150*"/>
            <RowDefinition Height="70*"/>
            <RowDefinition Height="70*"/>
            <RowDefinition Height="70*"/>
            <RowDefinition Height="70*"/>
            <RowDefinition Height="70*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="150*"/>
            <ColumnDefinition Width="150*"/>
            <ColumnDefinition Width="150*"/>
        </Grid.ColumnDefinitions>
        <Image Margin="15" Source="{Binding img1}"/>
        <Image Margin="15" Grid.Column="1" Source="{Binding img2}"/>
        <Image Margin="15" Grid.Column="2" Source="{Binding img3}"/>
        <TextBox Grid.Row="1" Margin="15" Height="30"
                 Text="{Binding Tb1, UpdateSourceTrigger=PropertyChanged}"/>
        
        <TextBox Grid.Row="1" Grid.Column="1" Margin="15" Height="30"
                 Text="{Binding Tb2, UpdateSourceTrigger=PropertyChanged}"/>
        
        <TextBox Grid.Row="1" Grid.Column="2" Margin="15" Height="30"
                 Text="{Binding Tb3, UpdateSourceTrigger=PropertyChanged}"/>
 
        <Button Grid.Row="2" Content="Start" Command="{Binding AddCommand}"/>
        <Button Grid.Row="2" Grid.Column="1" Content="Start" Command="{Binding AddCommand1}"/>
        <Button Grid.Row="2" Grid.Column="2" Content="Start" Command="{Binding AddCommand2}"/>
        <Button Grid.Row="3" Content="Stop" Command="{Binding AddCommand3}"/>
        <Button Grid.Row="3" Grid.Column="1" Content="Stop" Command="{Binding AddCommand4}"/>
        <Button Grid.Row="3" Grid.Column="2" Content="Stop" Command="{Binding AddCommand5}"/>
        <ProgressBar Grid.Row="5" Grid.ColumnSpan="3" Height="30" Margin="15"
                     Value="{Binding barProgress}" Minimum="0" Maximum="100"/>
    </Grid>
метод подключил просто в xaml.cs:
C#
1
2
3
4
5
public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainViewModel();
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2021, 23:13
Ответы с готовыми решениями:

Как перенести проект с WF на WPF используя шаблон MVVM?
Есть уже созданный проект на форме, со всеми проверками и данными, теперь его следует перенести на WPF используя шаблон MVVM. Я до конца не...

Проект Эйлера, 23 задание
Вроде все ошибки исправил, а правильного решения так и не получил (3921523) def List_of_Divisors(a): # Вернуть список делителей...

Не работает (видимо) байндинг при добавлении в коллекцию из другого потока (MVVM)
В общем, написал программу (WPF). Когда весь код был в MainWindow.xaml.cs, то такой код нормально работал: private...

21
0 / 0 / 0
Регистрация: 13.12.2021
Сообщений: 14
19.12.2021, 05:29  [ТС]
Студворк — интернет-сервис помощи студентам
окей
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
19.12.2021, 10:36
Цитата Сообщение от GryznySima Посмотреть сообщение
окей
Начать надо с того, что выделить в отдельную сущность повторяемые данные.
Сделайте класс (допустим) ImageVM: Bitmap изображения и стринги uri загруженной картинки, для ввода нового uri, filename локального буфера.
И если для каждой картинки нужен свой webcliend, то поле с ним.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2021, 10:36

Строка: Составить список дней недели от Пн до Вс. Видимо, плохо ищу, но найти не могу пример...
Всем привет. Мне нужно составить список дней недели от Пн до Вс. Видимо плохо ищу, но найти не могу пример. Вот на этом примере...

Binding и Template - найти ошибку
Доброго времени суток. Возникла проблема с привязкой данных. Имеется основное окно, в котором есть Grid с ссылкой на мой контрол. ...

Binding StringBuilder MVVM
не получается обновить свойства, текст добавляется но не обновляется при выполнении StringBuilder.Append. в Mode значение TwoWay. если...

Binding форм и mvvm
mvvm и binding не ясно как связываются view c viewmodel в некоторых случаях, например имеется основное окно MainWindowView c...

MVVM, непонятки c binding-ом
WPF + MVVM light Не работает связывание свойств ViewModel с View. При открытии формы отрабатывает локатор - это видно по логам и...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Новая последнея моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
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