С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
-22 / 28 / 2
Регистрация: 17.03.2018
Сообщений: 758
1

IValueConverter зачем два object?

04.01.2019, 17:37. Показов 1582. Ответов 39
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Зачем два обекта здесь?

C#
1
2
3
4
5
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
 
 
        }
Есть ли где нормальная расшифровка по этой штуке?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.01.2019, 17:37
Ответы с готовыми решениями:

IValueConverter и параметры
Как в IValueConverter передать имя столбца DataGrig? Вопрос может быть странный, но мне нужно...

WindowState, Binding, IValueConverter
Доброго времени суток. Возникла интересная проблемка: Во время инициализации приложения...

Не работает преобразование значений при биндинге (IValueConverter)
<Button Click="btnMinimize_Click" Cursor="Hand" Height="10" Margin="5,0,0,0"...

Непостоянное исключение Cannot access a disposed object. Object name: 'System.Net.Sockets.NetworkStream'
Добрых времени суток. Код прост - отправляет данные на сервер и принимает результат с оного....

39
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
04.01.2019, 17:43 2
Цитата Сообщение от Bulky Посмотреть сообщение
Есть ли где нормальная расшифровка по этой штуке?
В документации интерфейса не пробовали смотреть?
The Convert and ConvertBack methods also have a parameter called parameter so that you can use the same instance of the converter with different parameters. For example, you can write a formatting converter that produces different formats of data based on the input parameter that you use. You can use the ConverterParameter of the Binding class to pass a parameter as an argument into the Convert and ConvertBack methods.
Ну а первое — это значение, которое конвертируется.
0
-22 / 28 / 2
Регистрация: 17.03.2018
Сообщений: 758
04.01.2019, 17:48  [ТС] 3
Цитата Сообщение от kolorotur Посмотреть сообщение
В документации интерфейса не пробовали смотреть?
Эту документацию как обычно писали, те кто уже знает. И ес-но как всегда поленились или забыли написать самое главное и нужное для меня. )

Не найду пример в сети когда Value зависит от логики, например двух Boolean vars.
0
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
04.01.2019, 18:46 4
Цитата Сообщение от Bulky Посмотреть сообщение
Эту документацию как обычно писали, те кто уже знает.
Простите, немного не понял эту фразу.
А кто должен документацию писать? Те, кто не знает?

Цитата Сообщение от Bulky Посмотреть сообщение
Не найду пример в сети когда Value зависит от логики, например двух Boolean vars.
Снова не понял.
У вас есть какая-то конкреная проблема, которую вы пытаетесь решить через IValueConverter и не знаете как реализовать?
Или просто хотите примеры конвертеров, где используются оба параметра?

Если первое, то начните с конкретных вопросов, а если второе, то по указанной выше ссылке приведен список встроенных в .NET классов, реализующих интерфейс IValueConverter. Достаточно почитать их документацию и посмотреть — используется ли второй параметр object и если да, то для чего — там все задокументировано.
Для закрепления знаний можно создать обычный консольный проект и поиграться с вызовом Convert этих классов с разными параметрами, при этом смотря на возвращаемое значение.
0
-22 / 28 / 2
Регистрация: 17.03.2018
Сообщений: 758
04.01.2019, 19:04  [ТС] 5
Цитата Сообщение от kolorotur Посмотреть сообщение
У вас есть какая-то конкреная проблема, которую вы пытаетесь решить через IValueConverter и не знаете как реализовать?
не знаю как реализовать:

Код нерабочий. Так сказать, понять что нужно.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
        
if (A  && B  == false)
 
return Brush.White;
 
if (A && B == true)
 
return Brush.Green;
 
return Brush.White;
 
}
Но к сожалению это так не работает. Нужно привязать к value.

Добавлено через 6 минут
Как-то так.
0
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
04.01.2019, 19:13 6
Цитата Сообщение от Bulky Посмотреть сообщение
Нужно привязать к value.
Что такое А и В? Свойства класса, реализующего интерфейс?
Что предполагается передавать в качестве value? true/false, на которые проверяются A и B?

Опишите саму задачу, которую вы пытаетесь решить.
0
-22 / 28 / 2
Регистрация: 17.03.2018
Сообщений: 758
04.01.2019, 19:20  [ТС] 7
Цитата Сообщение от kolorotur Посмотреть сообщение
Опишите саму задачу, которую вы пытаетесь решить.
есть bool A и bool B (находятся в классе, например Box), если A && B == false, конвертер выводит Brush.White.
Если A && B == true, конвертер выводит Brush.Green.

Такой конвертер (без логики) у меня работает без проблем. но мне нужно реализовать с двумя и более vars.
0
HF
1202 / 791 / 188
Регистрация: 09.09.2011
Сообщений: 2,411
Записей в блоге: 2
04.01.2019, 19:28 8
Цитата Сообщение от Bulky Посмотреть сообщение
if (A *&& B *== false)
return Brush.White;
Я тоже считаю что нужно сначала выложить пример разметки и описания цели задачи, но уже предположу, что ТСу нужен вот такой интерфейс - IMultiValueConverter. Пример кода: WPF IValueConverter - converting multiple values into a single value

Добавлено через 2 минуты
Цитата Сообщение от Bulky Посмотреть сообщение
есть bool A и bool B (находятся в классе, например Box
Тогда можно было бы создать свойство в классе, которое бы отвечало за логику генерации нужного цвета. И в разметке биндиться уже к нему. И в конвертере уже использовать только одно значение. Причём можно даже уже и конвертер не использовать.
0
-22 / 28 / 2
Регистрация: 17.03.2018
Сообщений: 758
04.01.2019, 19:36  [ТС] 9
Цитата Сообщение от HF Посмотреть сообщение
Тогда можно было бы создать свойство в классе, которое бы отвечало за логику генерации нужного цвета.
Покажите как.
0
Модератор
Эксперт .NET
15856 / 11002 / 2855
Регистрация: 21.04.2018
Сообщений: 32,328
Записей в блоге: 2
04.01.2019, 21:13 10
Цитата Сообщение от Bulky Посмотреть сообщение
есть bool A и bool B (находятся в классе, например Box), если A && B == false, конвертер выводит Brush.White.
Если A && B == true, конвертер выводит Brush.Green.
Раз у Вас есть более одного (в Вашем случае два) значения к которым надо привязываться, то Вам нужен не конвертер, а мультиконвертер. Наследуется от IMultiValueConverter.

Добавлено через 3 минуты
Цитата Сообщение от Bulky Посмотреть сообщение
Цитата Сообщение от HF Посмотреть сообщение
Тогда можно было бы создать свойство в классе, которое бы отвечало за логику генерации нужного цвета.
Покажите как.
Если в данных есть два свойства, совместное состояние которых надо ОТОБРАЗИТЬ определённым образом (в данном случае цветом), то это делать надо через WPF мультиконвертер.
Если же, эти свойства влияют на СОСТОЯНИЕ данных, то это надо реализовывать в VM или в Model.

Добавлено через 1 минуту
Bulky, хотя, если это касается не обобщённого, типового случая, а единичного - то это надо делать через стиль и триггера.
0
-22 / 28 / 2
Регистрация: 17.03.2018
Сообщений: 758
04.01.2019, 21:16  [ТС] 11
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Раз у Вас есть более одного (в Вашем случае два) значения к которым надо привязываться, то Вам нужен не конвертер, а мультиконвертер. Наследуется от IMultiValueConverter
Вчера однокурсник заявил, что Одно. Сегодня ближе к обеду это Одно заработало.
Но тут звонит, что уже Не Одно. Теперь оказывается есть Мультиконвертер.
Буду искать в сети примеры работы МультиКонвертера и подойдет ли он к Адронному Коллайдеру.
0
HF
1202 / 791 / 188
Регистрация: 09.09.2011
Сообщений: 2,411
Записей в блоге: 2
04.01.2019, 22:03 12
Как я понял, задача вытекла из соседней темы.
Цитата Сообщение от Bulky Посмотреть сообщение
if (bool A && bool B == false; //в value передается Brush.White
if bool A && bool B == true; // *в value передается Brush. Green
If bool C == true // в value передается Brush.Red
Почему нельзя сделать в виде простого свойства? Вот этот код выделить в свойство и привязаться к нему. Оно будет содержать уже нужное значение. И так как логика не простая, то лучше и оставить её (по моему мнению) прямо во вьюмодели (или сервисе). Но не глубоко, в конвертерах. Так как потом никто не поймёт почему простой конвертер выдаёт какой-то непонятный результат или вообще падает (так как нет доступа к нужным свойствам или значениям).

C#
1
2
3
4
5
6
7
8
9
10
11
        public Brush BrushFromConditionalResult
        {
            get
            {
                if (C == true) return Brushes.Red;
                if (A && B) return Brushes.White;
                if (A == B) return Brushes.Green;
 
                throw new NotSupportedException();
            }
        }
XML
1
2
3
<Ellipse
            Width="17" Height="17" HorizontalAlignment="Left" VerticalAlignment="Top"
            Fill="{Binding BrushFromConditionalResult}"  Stroke="Black" />
Сложно понять как работают А, B, C, поэтому возможно требуются событие NotifyPropertyChanged. Но это уже нужно по коду смотреть.
0
-22 / 28 / 2
Регистрация: 17.03.2018
Сообщений: 758
04.01.2019, 22:10  [ТС] 13
Цитата Сообщение от HF Посмотреть сообщение
Сложно понять как работают А, B, C, поэтому возможно требуются событие NotifyPropertyChanged. Но это уже нужно по коду смотреть.
У самих "истоков" A,B,C опрашиваются циклично, прилетают в VM, где становятся свойствами затем попадают через биндинг в XAML. Вроде как "забор" VM реализован. Хотя я его не вижу и не могу потрогать. )
0
Модератор
Эксперт .NET
15856 / 11002 / 2855
Регистрация: 21.04.2018
Сообщений: 32,328
Записей в блоге: 2
04.01.2019, 23:04 14
Цитата Сообщение от Bulky Посмотреть сообщение
У самих "истоков" A,B,C опрашиваются циклично, прилетают в VM, где становятся свойствами затем попадают через биндинг в XAML. Вроде как "забор" VM реализован. Хотя я его не вижу и не могу потрогать. )
Если свойства A, B, С - это свойства самой VM, с нормальной реализацией INPC, то проще всего это сделать через триггера в XAML. Это это больше всего будет соответствовать "духу" WPF.

Добавлено через 40 минут
Цитата Сообщение от Bulky Посмотреть сообщение
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Что это за непонятный метод Set ?
"Запускает" property changed event.
Интересно посмотреть на эту реализацию....
0
-22 / 28 / 2
Регистрация: 17.03.2018
Сообщений: 758
05.01.2019, 18:04  [ТС] 15
Элд Хасп,
а по фэншую ли когда, имя вновь созданного свойства совпадает с именем variable которую "биндишь"?

Например:

XML
1
2
3
4
5
<Controls1:UC_Ellipse_1
                                x:Name="Ellipse_1"
                                Canvas.Left="307"
                                Canvas.Top="420"
                                Ellipse_1_Fill="{Binding Ellipse_1_Fill}" />
0
Модератор
Эксперт .NET
15856 / 11002 / 2855
Регистрация: 21.04.2018
Сообщений: 32,328
Записей в блоге: 2
05.01.2019, 18:28 16
Цитата Сообщение от Bulky Посмотреть сообщение
а по фэншую ли когда, имя вновь созданного свойства совпадает с именем variable которую "биндишь"?
Ну, желательно давать имена которые делают код более читабельным. Если одинаковые имена этому помогают, то почему нет?
Другое дело, что в реале такое маловероятно.
Обычно свойства VM отражают некое состояние Model, и для большей читабельности имена им дают соответствующие.
0
-22 / 28 / 2
Регистрация: 17.03.2018
Сообщений: 758
05.01.2019, 18:46  [ТС] 17
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Обычно свойства VM отражают некое состояние Model, и для большей читабельности имена им дают соответствующие.
Имена одних и тех же vars по разные стороны VM по какому принципу даете? Пример???

Добавлено через 13 минут
Элд Хасп, Добавляя два новых свойства в UC, и "выкручивая" себе мозг как назвать по фэншую новые свойства, добавил префикс 'Property_' к имени свойства. Скомпилил, никаких ошибок. Но XAML ругнулся на то, что такое уже есть.
В поисках чуть не поседел, ну нет такого имени. Заменил Property на Prop, - ошибка ушла.

Мораль такова, -избегайте слова Property в имени свойства.
0
Модератор
Эксперт .NET
15856 / 11002 / 2855
Регистрация: 21.04.2018
Сообщений: 32,328
Записей в блоге: 2
05.01.2019, 19:24 18
Цитата Сообщение от Bulky Посмотреть сообщение
Мораль такова, -избегайте слова Property в имени свойства
Если это окончание названия свойства, то это зарезервировано для свойств зависимостей
0
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
05.01.2019, 22:04 19
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Интересно посмотреть на эту реализацию....
https://github.com/Egor92/WPFSamples
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public abstract class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected virtual void OnPropertyChanged(string propertyName = null)
        {
            var handler = PropertyChanged;
            if (handler != null)
                handler.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
 
        protected virtual bool SetProperty<T>(ref T storage, T value, string propertyName = "")
        {
            if (EqualityComparer<T>.Default.Equals(storage, value))
                return false;
            storage = value;
            OnPropertyChanged(propertyName);
            return true;
        }
    }
0
Модератор
Эксперт .NET
15856 / 11002 / 2855
Регистрация: 21.04.2018
Сообщений: 32,328
Записей в блоге: 2
05.01.2019, 23:58 20
Lexeq, и каким образом она работает если не передавать propertyName ? (см. Разница между просто Ellipse и Ellipse который лежит основе User Control)

Добавлено через 50 секунд
Какая-то "кривая" реализация....

Добавлено через 25 минут
Цитата Сообщение от Bulky Посмотреть сообщение
Имена одних и тех же vars по разные стороны VM по какому принципу даете? Пример???
Не совсем понимаю, что Вы подразумеваете под разными сторонами.
У VM только одна "сторона" обращённая к View. Model ничего не знает о VM и у VM не может быть "стороны" для Model.
Перед созданием VM надо создать View. А View лучше всего начинать создавать с VMDD. У VMDD создаются свойства для привязки WPF элементов. Так как VMDD сама ничего не знает об окне, его элементах, то какой смысл создавать свойства с названиями элементов? Может потом надо будет к этому свойству привязать десяток элементов?
Другое дело, если название свойства отображает состояние данных (напрямую или после преобразования, обработки), то тогда создавая в окне привязки элементов Вам видны свойства VMDD и названия этих свойств напоминают об отображаемых данных. Это удобно.
Другое дело, создание UC. В этом случае CB UC - это часть View окна. UC создаётся для инкапсуляции взаимодействия между группой элементов, либо для создания элемента с новым поведением. И данными в таком случае выступают свойства элементов. В таком случае свойства VM (то есть CB окна) вполне разумно и удобно называть созвучно со свойствами элементов.

Но это всё моё представление об удобно-неудобном.
0
05.01.2019, 23:58
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.01.2019, 23:58
Помогаю со студенческими работами здесь

NullreferenceExeption was unhandled Object reference not set to an instance of an object
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Object = Object или как сравнить два объекта?
Люди, Край надо сравнить два объекта: Типа Set Obj1 = Form1 Set Obj2 = Form2 If Obj1 = Obj2...

Зачем используется приведение к Object в Stack<T>.Contains()?
Зачем используется приведение к Object в Stack&lt;T&gt;.Contains()?

Зачем оператору lock в качестве параметра нужен объект (object)
Зачем оператору lock в качестве параметра нужен объект (object) lock (lockObject) { //... }


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru