Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Rhoxolan
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
.NET 6

Скрытие текстблока, если значение свойства из ObservableCollection == null

24.10.2022, 19:16. Показов 665. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте. Столкнулся со следующей ситуацией.

Есть коллекция объектов, содержащих Nullable значения.

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
using System.Collections.ObjectModel;
 
namespace WpfApp2
{
    public class ExampleClass
    {
        public int A { get; set; }
        public int? B { get; set; }
    }
 
    public class ExampleVM
    {
        private ObservableCollection<ExampleClass> _classes;
 
        public ExampleVM()
        {
            _classes = new()
            {
                new() { A = 1, B = 2 },
                new() { A = 2, B = null },
            };
        }
 
        public ObservableCollection<ExampleClass> Classes
        {
            get
            {
                return _classes;
            }
            set
            {
                _classes = value;
            }
        }
    }
}
И задача стоит следующая - во View есть ListBox с кастомизированным ItemTemplate с TextBlock-ами для каждого свойства ExampleClass, и если у нас встречается null, TextBlock не отображается. Задачу усложняет то, что значение свойства идёт вместе с сопровождающим текстом.

Пока придумал следующее - в DataTrigger я проверяю значение текста на соответствие предполагаемому тексту, который был бы при null значении соответствующего свойства.
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
<Window x:Class="WpfApp2.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:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
 
    <Window.DataContext>
        <local:ExampleVM/>
    </Window.DataContext>
 
 
    <Grid>
        <ListBox Margin="50" ItemsSource="{Binding Classes}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="0.5, 0.5, 0.5, 3">
                        <TextBlock FontSize="14" Text="{Binding StringFormat=Значение A: {0} i., Path=A}"/>
 
 
                        <TextBlock x:Name="tb" FontSize="14" Text="{Binding StringFormat=Значение B: {0} i., Path=B}">
                            <TextBlock.Style>
                                <Style TargetType="TextBlock">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Text, ElementName=tb}" Value="Значение B:  i.">
                                            <Setter Property="Visibility" Value="Collapsed"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
 
 
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>
Работает так как и нужно

Но я вижу это скорее костылём, чем решением.

Как можно сделать это лучше? Я пытался привязать триггер к самому свойству "B", проверяя на x:null, но пока у меня ничего не получилось. У кого какие идеи по этому поводу?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2022, 19:16
Ответы с готовыми решениями:

Как установить значение null для свойства GUID
У меня есть объект типа Employee, у которого есть свойство Guid ( public Guid? CardNumber). Мне нужно чтобы в базу данных было записано...

Как выставить значение true свойства MdiList для пункта меню ArrangeIcons в menuStrip, если там этого свойства нет?
В лабораторной работе нужно выполнить некоторые шаги: в одном из них, одному из пунктов меню - Arrange Icons, созданного в menuStrip, нужно...

Почему значение свойства равно null даже после присвоения?
Всем привет! Подскажите пожалуйста почему не работает следующая конструкция: public class Employee { public...

2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,088
Записей в блоге: 2
24.10.2022, 21:02
Лучший ответ Сообщение было отмечено Rhoxolan как решение

Решение

Цитата Сообщение от Rhoxolan Посмотреть сообщение
Как можно сделать это лучше? Я пытался привязать триггер к самому свойству "B", проверяя на x:null, но пока у меня ничего не получилось
XML
27
28
29
                    <DataTrigger Binding="{Binding B}" Value="{x:Null}">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </DataTrigger>
1
 Аватар для Rhoxolan
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
24.10.2022, 23:29  [ТС]
Элд Хасп, Да, спасибо, работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2022, 23:29
Помогаю со студенческими работами здесь

Скрытие строки, если значение ячейки равно 0
Добрый день! Товарищи, помогите с проблемой! Необходим макрос для листа, который бы скрывал строки если значение ячейки равно 0....

Записать в TextBox если значение null
Всем добрый вечер. Ситуация такая: на форме в textbox ввожу данные, затем записываю в БД, некоторые значения можно не заполнять и они...

Проверить если в строке значение null
Доброго всем суток. Встал такой вопрос надеюсь на вашу помощь! Из формы я вношу значение в бд и нажимаю кнопку внести значения. Мне нужно...

Заменить значение если одно из условий Null
Подскажите как можно подставить значение в ячейку если одно из условий будет равно NULL В столбце Periodicity отсутствует указанное в...

Вывести 1 если другое поле не null, 0 если null
Всем доброго времени суток. Никак не могу найти ответ на вопрос в теме. Грубо говоря нужно вывести что-то типа этого: select (if...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 19.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru