Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459

Image source binding и INotifyPropertyChanged

14.02.2015, 23:36. Показов 3305. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пусть имеется изображение
XML
1
<Image x:Name="p1g" Source="{Binding player1.PField.Goalkeeper, Converter={Binding ImageConverter}}">
Поле Goalkeeper имеет тип Card. Экземпляр класса Player player1 описан в основном классе приложения.
На какой класс нужно повесить INotifyPropertyChanged, чтобы при изменении в коде player1.PField.Goalkeeper срабатывал конвертер и изображение обновлялось?

Добавлено через 55 минут
На поле Goalkeeper в классе Field я пробовал ставить INotifyPropertyChanged, но конвертер не вызывается.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2015, 23:36
Ответы с готовыми решениями:

Binding для св-ва Source компонента Image. Converter значений из Enum
Задача такова: есть список элементов в виде экземпляров класса Information, класс содержит некоторую информацию, в нем есть коллекция...

INotifyPropertyChanged + Binding + this.Resource
Здравствуйте уважаемые форумчане, столкнулся с такой проблемой, есть класс (WorkUsb) реализованный через INotifyPropertyChanged. Значение...

Отображение Image из SQL Server 2012(тип Image) в ListView с использованием Binding
Подскажите есть ли возможность отображать изображения из SQL Server через Binding в ListView? При этом учитывая, что изображение хранится...

12
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899
14.02.2015, 23:50
Exception, в Player вешал INotifyPropertyChanged??
0
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459
15.02.2015, 00:07  [ТС]
blackstar, Попробовал повесить и на Card, и на Field, и на Player, но безрезультатно.
То, что я затем созданный player1 присваиваю одному из полей класса Game ведь не столь важно? Туда ведь передается только ссылка.

Добавлено через 6 минут
Заметил, что почему-то event PropertyChangedEventHandler PropertyChanged всегда остается равным null.
0
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899
15.02.2015, 00:10
Exception, вы изображение в байтах храните? в классе записано типа такого???????:
C#
1
2
3
4
5
6
7
8
9
10
        private byte[] _img;
        public byte[] img
        {
            get { return _img; }
            set
            {
                _priborPhoto = value;
                OnPropertyChanged("img");
            }
        }
0
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459
15.02.2015, 00:17  [ТС]
blackstar, Нет, мне нужно, чтобы был вызван конвертер, который на вход получит тип Card, а выдаст BitmapImage. Но до конвертера дела не доходит.
0
Заблокирован
15.02.2015, 00:28
Exception, покажите больше кода - пока-что не ясно, в чем конкретно проблема.
0
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459
15.02.2015, 00:42  [ТС]
класс Player
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
public class Player : INotifyPropertyChanged
    {
        public string Name { get; set; }
        private Field pField;
        public Field PField
        {
            get { return pField; }
            set
            {
                pField = value;
                InvokePropertyChanged("PField");
            }
        }
        public List<Card> Deck { get; set; }
 
        public Player(string name)
        {
            this.Name = name;
        }
 
        private void InvokePropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
 
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
    }

класс Field
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
public class Field : INotifyPropertyChanged
    {
        private Card goalkeeper;
        private Card defender1;
        private Card defender2;
        private Card defender3;
 
        public Card Goalkeeper
        {
            get { return goalkeeper; }
            set
            {
                goalkeeper = value;
                InvokePropertyChanged("Goalkeeper");
            }
        }
        public Card Defender1
        {
            get { return defender1; }
            set
            {
                defender1 = value;
                InvokePropertyChanged("Defender1");
            }
        }
        public Card Defender2
        {
            get { return defender2; }
            set
            {
                defender2 = value;
                InvokePropertyChanged("Defender2");
            }
        }
        public Card Defender3
        {
            get { return defender3; }
            set
            {
                defender3 = value;
                InvokePropertyChanged("Defender3");
            }
        }
 
        public Field()
        {
            this.Goalkeeper = new Card();
            this.Defender1 = new Card();
            this.Defender2 = new Card();
            this.Defender3 = new Card();
        }
 
        private void InvokePropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
 
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
    }

класс Game
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
public class Game : INotifyPropertyChanged
    {
        const int GAME_END_SCORE = 3;
 
        private Player player1;
 
        public Player Player1
        {
            get { return player1; }
            private set
            {
                player1 = value;
                InvokePropertyChanged("Player1");
            }
        }
        public Player Player2 { get; private set; }
        public Score Score { get; private set; }
        private readonly int gameEndScore;
        public int GameEndScore { get { return gameEndScore; } }
 
        public Game(Player p1, Player p2)
        {
            this.Player1 = p1;
            this.Player2 = p2;
            this.Score = new Score();
            this.gameEndScore = GAME_END_SCORE;
        }
 
        public Game(Player p1, Player p2, int gameEndScore)
            : this(p1, p2)
        {
            this.gameEndScore = gameEndScore;
        }
 
        public Card GetAndRemoveFirstCard(Player player)
        {
            Card card = player.Deck.First();
            player.Deck.Remove(card);
            return card;
        }
 
        private void InvokePropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
 
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
    }

C#
1
2
3
4
public sealed partial class MainPage : Page
    {
        public Player player1 { get; set; }
        //...
C#
1
2
3
4
5
 public MainPage()
        {
            this.InitializeComponent();
            Start();
        }
C#
1
2
3
4
5
6
7
8
9
10
11
public void Start()
        {//...
            player1 = new Player("Player1");
            player2 = new Player("Player2");
            game = new Game(player1, player2, WIN_SCORE);
            game.Player1.PField = new Field();
            game.Player2.PField = new Field();
            game.Player1.Deck = new List<Card>();
            game.Player2.Deck = new List<Card>();
            //...
            game.Player1.PField.Goalkeeper = game.GetAndRemoveFirstCard(game.Player1)
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
15.02.2015, 10:42
Цитата Сообщение от Exception Посмотреть сообщение
<Image x:Name="p1g" Source="{Binding player1.PField.Goalkeeper, Converter={Binding ImageConverter}}">
Converter={StaticSource ImageConverter}
XML
1
<Image x:Name="p1g" Source="{Binding player1.PField.Goalkeeper, Converter={StaticSource  ImageConverter}}">
Предварительно создав в ресурсах экземпляр Converter'a
0
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459
15.02.2015, 13:47  [ТС]
kenny69,
XML
1
2
3
    <Page.Resources>
        <local:ImageConverter x:Key="imageConverter" />
    </Page.Resources>
XML
1
<Image x:Name="p1g" Source="{Binding game.Player1.PField.Goalkeeper, Converter={Binding imageConverter}}">
Всё равно конвертер не вызывается... Меня больше смущает тот факт, что PropertyChanged всегда остается null.
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
15.02.2015, 14:10
Вы опять сделали как и в прошлый раз. В конвертер не Binding, а StaticSource, я специально это выделял жирным.
0
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459
15.02.2015, 14:15  [ТС]
kenny69, Ой да, был невнимателен. Однако со StaticResource тоже не работает. (А StaticSource - ваша опечатка) )
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
15.02.2015, 14:32
Лучший ответ Сообщение было отмечено Exception как решение

Решение

а что в качестве контекста у вас?
поставьте game
C#
1
this.DataContext = game;
а после вот так:
XML
1
<Image x:Name="p1g" Source="{Binding Player1.PField.Goalkeeper, Converter={StaticResource imageConverter}}">
1
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459
15.02.2015, 14:39  [ТС]
Разобрался.
kenny69, private нужен для моей логики в приложении.
А чтобы всё работало, нужно было в xaml изменить на
XML
1
<Image x:Name="p1g" Source="{Binding Player1.PField.Goalkeeper, Converter={StaticResource imageConverter}}">
А в коде добавить
C#
1
p1g.DataContext = game;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2015, 14:39
Помогаю со студенческими работами здесь

Image.Source
Всем привет! Срочно!!! Нужно засунуть картинку в Image с C#. Мой код: browserImage.Source = new BitmapImage(new...

Манипуляции с Image.Source
Создаю новый компонент, наследуется от System.Windows.Controls.Image. В нём в виде списка элементов System.Windows.Controls.Image хранятся...

[WPF] Image binding template
Столкнулся с проблемой - необходимо изменить шаблон для кнопки таким образом, что бы в разметке xaml определенного окна можно было бы...

Image wpf binding and clear
Всем доброго дня. Есть главная форма, на ней картинка. ViewModel public class MainViewModel: Protected { private...

Работа с БД с использованием binding source, dataadaptor, dataset
Здравствуйте! Создал приложение Windows forms, На котором расположил dataGridView, которые привязаны к bindinssource, который, в свою...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru