Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175

DependencyProperty как отображать изменения свойства во View

27.01.2024, 19:27. Показов 6173. Ответов 84

Студворк — интернет-сервис помощи студентам
У меня есть Custom Control
xaml
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
43
44
45
46
<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Design_Style"
    xmlns:sys="clr-namespace:System;assembly=netstandard">
 
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/Design_Style;component/NumericUpDown.xaml"/>
    </ResourceDictionary.MergedDictionaries>
 
    <Style TargetType="{x:Type local:NumericUpDownTime}">
        <Setter Property="Value" Value="0"></Setter>
        <Setter Property="Minimum" Value="0"></Setter>
        <Setter Property="Maximum" Value="1000"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:NumericUpDownTime}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                            <ColumnDefinition Width="auto"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <local:NumericUpDown 
                            Value="{TemplateBinding Value}"
                            Minimum="{TemplateBinding Minimum}"
                            Maximum="{TemplateBinding Maximum}"
                            Grid.Column="0" 
                    Height="{TemplateBinding Height}"
                    Width="{TemplateBinding Width}"></local:NumericUpDown>
                        <ComboBox Name="PART_NumericComboBox" Grid.Column="1"    
                            Height="{TemplateBinding Height}"
                            Margin="14,0,0,0"
                            Width="66" 
                            SelectedValue="{Binding (local:NumericUpDownTime.TimeType), Mode=TwoWay}"
                            SelectedIndex="0">
                            <sys:String>Mc</sys:String>
                            <sys:String>Cек</sys:String>
                            <sys:String>Mин</sys:String>
                            <sys:String>Час</sys:String>
                        </ComboBox>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>
c#
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
using System.Windows.Controls;
using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
 
namespace Design_Style
{
    [TemplatePart(Name = ComboBoxTemplateName, Type = typeof(ComboBox))]
    public class NumericUpDownTime : NumericUpDown
    {
        private const string ComboBoxTemplateName = "PART_NumericComboBox";
        static NumericUpDownTime()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(NumericUpDownTime), new FrameworkPropertyMetadata(typeof(NumericUpDownTime)));
        }
        private ComboBox? NumericComboBox;
 
 
        #region TimeType 
        public static readonly DependencyProperty TimeTypeProperty = DependencyProperty.Register(
                   "TimeType",
                   typeof(string),
                   typeof(NumericUpDownTime),
                   new FrameworkPropertyMetadata(string.Empty)
                   {
                       CoerceValueCallback = (s, value) => value == null ? string.Empty : value,
                       BindsTwoWayByDefault = true,
                       DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
                   });
 
        private static void OnTimeTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            NumericUpDownTime numeric = (NumericUpDownTime)d;
            if (numeric.NumericComboBox != null)
            {
                //  numeric.NumericComboBox.SelectedIndex = numeric.NumericComboBox.Items.IndexOf(numeric.NumericComboBox.Items.Cast<string>().FirstOrDefault(item => item == e.NewValue as string));
            }
        }
 
        public string TimeType
        {
            get { return (string)GetValue(TimeTypeProperty); }
            set { SetValue(TimeTypeProperty, value); }
        }
        #endregion
 
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            ComboBox? tempComboBox = GetTemplateChild(ComboBoxTemplateName) as ComboBox;
            if (tempComboBox != null)
            {
                NumericComboBox = tempComboBox;
                NumericComboBox.SelectionChanged -= NumericComboBoxSelectionChanged;
                NumericComboBox.SelectionChanged += NumericComboBoxSelectionChanged;
            }
 
        }
 
        private void NumericComboBoxSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (NumericComboBox != null && NumericComboBox.SelectedValue is string text)
            {
                TimeType = text;
            }
        }
 
    }
}
У Custom Control есть свойсво TimeType оно привязано к SelectedValue у ComboBox.
Я объявил событие NumericComboBoxSelectionChanged, при изменение SelectedValue меняется значение у свойства TimeType.


У меня не получается сделать чтобы при изменение свойства TimeType из вне
К примеру по нажатию кнопки изменить значение.
C#
1
2
3
4
private void Button_Click_2(object sender, RoutedEventArgs e)
{
  NumericTime.TimeType = "Мс";
}
Значение TimeType меняется на указанное, но во View оно не изменяется.
Заранее всем спасибо)

Добавлено через 3 часа 38 минут
Пока что ничего лучше не придумал. Как то так.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        #region TimeType 
        public static readonly DependencyProperty TimeTypeProperty =
         DependencyProperty.Register(nameof(TimeType),
             typeof(string),
             typeof(NumericUpDownTime),
             new FrameworkPropertyMetadata("Мс", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)
             {
                 PropertyChangedCallback = Update
             });
 
        private static void Update(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            NumericUpDownTime numericUpDownTime = (NumericUpDownTime)d;
            if(numericUpDownTime != null)
            {
                var index =  numericUpDownTime.NumericComboBox.Items.IndexOf(e.NewValue as String);
                numericUpDownTime.NumericComboBox.SelectedIndex = index;
            }
        }
Добавлено через 3 минуты
И изменил привязки чтобы работали на уровне родителя
XML
1
 Value="{Binding Value, RelativeSource={RelativeSource Mode=TemplatedParent}}"
TempelateBinding хоть и работает на уровне шаблона, но данные для наследуемого NumericUpDown не доходят ибо он определен в другом шаблоне, но в нашем элементе управление и поэтому TemplatedParent отличный вариант, ведь если кто то захочет переопределить стиль, то привязка не отлетит.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.01.2024, 19:27
Ответы с готовыми решениями:

Как отображать мой view ?
Добрый день! Прошу Вашей помощи. Я учусь писать модули для OpenCart, Я написал простой модуль(controller и view), который...

WPF MVVM View и ViewModel или UserControl и DependencyProperty
Не так давно ударился в WPF и шаблон MVVM. Вот такой вопрос возник... У меня есть View которая &quot;собирается&quot; из более мелких View....

Как в стилизованном селекте отображать изменения
Стилизовал селект при помощи плагина BVSelect на vanilla js. У меня в обычном селекте идет валидация даты. Допустим я выбрал 31 число...

84
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
03.02.2024, 00:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от xellan24rus Посмотреть сообщение
Но для примера где можно было увеличить значение или уменьшить
В Selector:
ComboBox - Есть список разных значений и перебор их.
TabControl - Перебор вкладок.
ListBox, ListView - перебор элементов (обычно строк).
DataGrid - перебор строк.

И это всё можно реализовать одним внедрением в Selector.

Добавлено через 3 часа 24 минуты
xellan24rus, скинул фиксацию.
В ветке eldhasp - пример.

Добавлено через 24 минуты
Ещё добавил пример с ToggleButton.

Добавлено через 1 час 25 минут
Вынес управление TextBox-ом.
Возможно нарушил где-то логику. Проверьте.

Теперь его можно использовать независимо от RangeBase.

Добавлено через 2 минуты
Но что-то мне это не очень нравится.
Тогда получается сам NumericUpDown непонятно для чего нужен...

По идее логика должна быть разнесена между TextBox и NumericUpDown.
Надо подумать где границу провести.

Добавлено через 1 минуту
НО это уже завтра.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
03.02.2024, 14:53
Цитата Сообщение от Элд Хасп Посмотреть сообщение
xellan24rus, ....
....
НО это уже завтра.
Убрал лишние свойства из DoubleTextBox.

Добавлено через 5 часов 10 минут
Ещё подчистил.
1
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
03.02.2024, 15:37  [ТС]
Элд Хасп, я пока что разбираюсь с кодом и думаю как можно было сделать.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Возможно нарушил где-то логику. Проверьте.
Всё работает) Единственное ValueResult только нету и формата измерения типа единиц.
И игнорирование атрибутов git что то сотворило

Пересборка\удаление obj debug не спасает. Видать что то нужное удалилось, возможно

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Тогда получается сам NumericUpDown непонятно для чего нужен...
Для ap свойств если только, для этого его вполне достаточно.
Единственное в NumericUpDownTime если сделать ValueResult и забиндить его в DoubleTextBox, и туда пробросить TimeIntervals, то как мне отличать NumericUpDown от NumericUpDownTime чтобы ValueResult не работал в NumericUpDown. Пока что об этом думаю
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
03.02.2024, 15:46
Цитата Сообщение от xellan24rus Посмотреть сообщение
Единственное ValueResult только нету и формата измерения типа единиц.
Эту часть я ещё не трогал.
Пока причёсываю NumericUpDown
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
03.02.2024, 15:48  [ТС]
Элд Хасп, понял, в своей ветке я обновлял код. Там есть работа ValueResult и формат единиц измерения, вот его хотел бы оставить как он сейчас реализован. Он задан в самом ComboBox.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
03.02.2024, 15:50
Цитата Сообщение от xellan24rus Посмотреть сообщение
Для ap свойств если только, для этого его вполне достаточно.
Сейчас в нём остались только свойство для настройки визуала.
По идее, эти свойства могут понадобиться где угодно и должны работать с любыми элементами.
Поэтому согласен с вами - их нужно вынести в отдельный статический хелпер не завязанный на какой-то конкретный тип элементов.

Цитата Сообщение от xellan24rus Посмотреть сообщение
e если сделать ValueResult и забиндить его в DoubleTextBox, и туда пробросить TimeIntervals, то как мне отличать NumericUpDown от NumericUpDownTime
Посмотрю что за ValueResult и зачем он там нужен.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
03.02.2024, 16:00  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
их нужно вынести в отдельный статический хелпер не завязанный на какой-то конкретный тип элементов
И тогда от Custrom Control останется только
C#
1
    DefaultStyleKeyProperty.OverrideMetadata(typeof(NumericUpDown), new FrameworkPropertyMetadata(typeof(NumericUpDown)));
Так как для двух элементов будет один класс со своими общими ap
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
03.02.2024, 17:45
Цитата Сообщение от xellan24rus Посмотреть сообщение
И тогда от Custrom Control останется только
Можно ещё переопределить в нём AP-свойства как DP-свойства - для удобства в XAML.

Добавлено через 52 секунды
Или вообще его удалить и просто создать кастомный стиль для RangeBase.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
03.02.2024, 18:56  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Или вообще его удалить и просто создать кастомный стиль для RangeBase.
Можно оставить Custrom Control чтобы сохранить имя элемента) Чтобы логически он знаком был из того же win form.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
переопределить в нём AP-свойства как DP-свойства
Тогда точно придётся делать стиль для RangeBase) В целом можно сделать базовый класс с App свойствами и наследуемый от RangeBase, так сказать Custom Control будет содержать в себе настройки персонализации. Может для единичного элемента будет в этом смысл, чтобы не играться со стилями
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
03.02.2024, 20:52
Цитата Сообщение от xellan24rus Посмотреть сообщение
Пересборка\удаление obj debug не спасает. Видать что то нужное удалилось, возможно
Переключился на main ветку - такая же ошибка.
Возвращаюсь на свою - ошибка сюда тоже пертащилась.
Что не пробовал - не пропадает.

Добавлено через 1 минуту
Цитата Сообщение от xellan24rus Посмотреть сообщение
RangeBase, так сказать Custom Control будет содержать в себе настройки персонализации
Сделал через переопределение AP-свойство.
Успел проверить до переключения веток.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
03.02.2024, 21:39  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Переключился на main ветку - такая же ошибка.
Возвращаюсь на свою - ошибка сюда тоже пертащилась.
Что не пробовал - не пропадает.
У меня как раз таки на ветке main нет ошибки, проект собираю-запускаю спокойно.
Вашу ветку я смог собрать без ошибки, для этого в окне mainWindow я удалил ошибку, далее проект перенес на диск C и там уже удалил все obj и debug папки, пересобрал проект, ошибки нет.
Думаю это связано с тем что проект при первом запуске собирается не правильно из за ошибки и не может в будущем собраться, пока не сменишь все пути к нему.

Добавлено через 6 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сделал через переопределение AP-свойство.
Успел проверить до переключения веток.
Нашел StyleDataHelper, интересная задумка, dp шки заданы отдельно и их к ap свойствам хоть где указать можно

Добавлено через 23 минуты
Элд Хасп, но в StyleDataHelper с указанием типа есть проблема.
Пример
C#
1
2
3
4
5
   public static readonly DependencyProperty BackgroundArrowProperty
       = DependencyProperty.RegisterAttached(nameof(SetBackgroundArrow)[3..],
                                             typeof(SolidColorBrush),
                                             typeof(FrameworkElement,
                                             new PropertyMetadata(new SolidColorBrush((Color)ColorConverter.ConvertFromString("#BBBBBB"))));
Если я задам в App.xaml
XML
1
2
3
 <Style TargetType="{x:Type Design_Style:NumericUpDown}">
     <Setter Property="Design_Style:StyleDataHelper.BackgroundArrow" Value="GreenYellow"></Setter>
 </Style>
Ошибка
ArgumentNullException: Value cannot be null. Arg_ParamName_Name
если указать OwnerType как StyleDataHelper, то ошибок нет.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
03.02.2024, 21:50
Цитата Сообщение от xellan24rus Посмотреть сообщение
Если я задам в App.xaml
Это же не AP свойство, а DP!

XML
1
2
3
 <Style TargetType="{x:Type Design_Style:NumericUpDown}">
     <Setter Property="BackgroundArrow" Value="GreenYellow"></Setter>
 </Style>
1
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
03.02.2024, 21:59  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это же не AP свойство, а DP!
Понял) Забыл про это...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
03.02.2024, 22:10
Цитата Сообщение от xellan24rus Посмотреть сообщение
Вашу ветку я смог собрать без ошибки, для этого в окне mainWindow я удалил ошибку, далее проект перенес на диск C и там уже удалил все obj и debug папки, пересобрал проект, ошибки нет.
Делаю новое клонирование в новую папку - ошибка в вашей ветке сразу выбивает.
Но проект собирается и запускается.

Добавлено через 5 минут
Добавил в проект новое окно.
Все ошибки исчезли.
Удалил добавленное окно - ошибки не проявились.

Добавлено через 3 минуты
И в других копиях репозитория ошибки тоже исчезли....
Мистика да и только!
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
03.02.2024, 22:21  [ТС]
Элд Хасп, мистика не то слово..
Мне помогло другое решение, удалил имена пути сгенерированного git(от)
Вышло что то вроде
C:\Users\Pc\Downloads\Design_Style\Desig n_Style
Было
C:\Users\Pc\Downloads\Design_Style-eldhasp\Design_Style-eldhasp

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Добавил в проект новое окно.
этот вариант у меня тоже сработал. Очевидно что это проблема на стороне vs
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
03.02.2024, 23:27
xellan24rus, ошибку при смене словаря устранил.
Но честно говоря, неожиданная ошибка.
На мой взгляд это откровенный баг.
После смены коллекции свойство Selector.SelectedValue сбрасывается, вместо ревалидации привязки.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 00:04  [ТС]
Элд Хасп, посмотрел реализацию, теперь смена словаря работает хорошо, UpdateTarget обновляет сразу, у базовой реализации ComboBox с этим явно проблемы...

И всё хотелось бы оставить контент такой реализации, в плане локализации, достаточно динамические ресурсы задать из словерей. На стороне c# в этом плане даже делать ничего не придётся
XML
1
2
3
4
5
6
7
8
9
 <ComboBox Name="PART_NumericComboBox" Grid.Column="1"
Height="{TemplateBinding Height}"
Margin="14,0,0,0"
Width="66">
      <ComboBoxItem Content="Мс" IsSelected="{Binding Path=TimeType, RelativeSource={RelativeSource AncestorType={x:Type local:NumericUpDownTime}}, Converter={StaticResource TimeIntervalToStringConverter}, ConverterParameter={x:Static local:TimeIntervals.Millisecond}}" />
      <ComboBoxItem Content="Сек" IsSelected="{Binding Path=TimeType, RelativeSource={RelativeSource AncestorType={x:Type local:NumericUpDownTime}}, Converter={StaticResource TimeIntervalToStringConverter}, ConverterParameter={x:Static local:TimeIntervals.Second}}" />
      <ComboBoxItem Content="Мин" IsSelected="{Binding Path=TimeType, RelativeSource={RelativeSource AncestorType={x:Type local:NumericUpDownTime}}, Converter={StaticResource TimeIntervalToStringConverter}, ConverterParameter={x:Static local:TimeIntervals.Minute}}" />
      <ComboBoxItem Content="Час" IsSelected="{Binding Path=TimeType, RelativeSource={RelativeSource AncestorType={x:Type local:NumericUpDownTime}}, Converter={StaticResource TimeIntervalToStringConverter}, ConverterParameter={x:Static local:TimeIntervals.Hour}}" />
  </ComboBox>
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
04.02.2024, 00:24
Цитата Сообщение от xellan24rus Посмотреть сообщение
И всё хотелось бы оставить контент такой реализации, в плане локализации, достаточно динамические ресурсы задать из словерей.
Это не проблема.
Можно использовать свойства, можно ресурсы.
Чего точно не стоит делать - так это менять в шаблоне.

Добавлено через 26 секунд
Цитата Сообщение от xellan24rus Посмотреть сообщение
IsSelected="{Binding Path=
А это зачем?

Добавлено через 10 минут
Цитата Сообщение от xellan24rus Посмотреть сообщение
достаточно динамические ресурсы задать из словерей
Показал как это делать в XAML.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 00:25  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А это зачем?
Я не совсем понял почему это работает. Но в конечном итоге для каждого формата единицы измерения устанавливается свой TimeType
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Чего точно не стоит делать - так это менять в шаблоне.
Почему? Можно переопределить стиль и вместо моих записей указать свои динамические ресурсы, в реализации подобная локализация очень простая.
Или всё таки для каждого имени ComboBoxItem лучше создать свои dp свойства?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
04.02.2024, 00:29
Цитата Сообщение от xellan24rus Посмотреть сообщение
На стороне c# в этом плане даже делать ничего не придётся
Для того чтобы легко использовать что-либо в XAML сначала нужно на Шарпе потрудиться над правильной реализацией всех нюансов.

Добавлено через 1 минуту
Цитата Сообщение от xellan24rus Посмотреть сообщение
Я не совсем понял почему это работает. Но в конечном итоге для каждого формата единицы измерения устанавливается свой TimeType
Для этого достаточно использования SelectedItem.
Как я показывал вам в примере с конвертером отображения.

Добавлено через 1 минуту
Цитата Сообщение от xellan24rus Посмотреть сообщение
Почему? Можно переопределить стиль и вместо моих записей указать свои динамические ресурсы,
Причём здесь правильная-неправильная Шарп реализация и динамические ресурсы?
Как одно с другим связано?

Если всё сделано правильно на Шарпе, то используйте как хотите, с какими хотите ресурсами.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.02.2024, 00:29

При помощи какого свойства можно располагать view-элементы над другими view-элементами?
я новичок. При помощи какого свойства я могу располагать view-элементы над другими view-элементами. И еще как можно программно задавать...

Как обновить View при изменении свойства в ViewModel MVVM
View: &lt;DataGrid Grid.Row=&quot;0&quot; ItemsSource=&quot;{Binding SaleItemData}&quot; AutoGenerateColumns=&quot;False&quot; CanUserAddRows=&quot;False&quot;&gt; ...

Как сохранить изменения в бд после редактирования в View
Имеется бд на сервере. Реализованы классы Linq to sql для таблиц бд. Есть страница для редактирования записи:@using (Html.BeginForm()) { ...

Динамически отображать свойства элементов
Добрый день! Есть treeview с большим количеством нодов. Нужно сделать так, чтобы при выборе нода в панели рядом отображались его...

Как сделать доступными для изменения свойства RuntimeBroker в ComponentServices?
Как сделать доступными для изменения свойства RuntimeBroker в ComponentServices?


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru