Форум программистов, компьютерный форум, киберфорум
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. Показов 6017. Ответов 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
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 00:31  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Показал как это делать в XAML.
Однако возможности wpf не перестают меня удивлять.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для этого достаточно использования SelectedItem.
Понял
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для того чтобы легко использовать что-либо в XAML сначала нужно на Шарпе потрудиться над правильной реализацией всех нюансов.
Похоже на то, но теперь код более универсален и из c# и из xaml можно задать локализацию
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
04.02.2024, 00:33
Цитата Сообщение от xellan24rus Посмотреть сообщение
но теперь код более универсален и из c# и из xaml можно задать локализацию
Всё верно.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
04.02.2024, 10:35
xellan24rus, обратите внимание, я закомментировал в XAML шаблона некоторые строки.
Вроде без них всё осталось по прежнему.
Поэтому не могу понять нужно ли снимать коммент с них, но для эксперимента сниму и исправлю с AP на DP свойства.
Например, вот эти строки:
XML
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
    <Style TargetType="{x:Type local:NumericUpDown}">
        <!--<Setter Property="local:NumericUpDown.CornerRadius" Value="6"></Setter>
        <Setter Property="local:NumericUpDown.BackgroundButton" Value="#F1F1F1"></Setter>
        <Setter Property="local:NumericUpDown.BackgroundButtonMouseOver" Value="#46BCFF"></Setter>
        <Setter Property="local:NumericUpDown.BackgroundArrow" Value="#BBBBBB"></Setter>
        <Setter Property="local:NumericUpDown.BackgroundArrowMouseOver" Value="#FFFFFF"></Setter>-->
        <Setter Property="Background" Value="White"></Setter>
        <Setter Property="BorderBrush" Value="#E5E5E5"></Setter>
        <Setter Property="BorderThickness" Value="1"></Setter>
        <Setter Property="Padding" Value="10 0 0 0"></Setter>
        <Setter Property="FontSize" Value="14"></Setter>
        <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:NumericUpDown}">
                    <!--<Border CornerRadius="{TemplateBinding local:NumericUpDown.CornerRadius}"-->
Добавлено через 2 минуты
Так же раскрою по нормальному Шаблон NumericUpDownTime
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 10:53  [ТС]
Элд Хасп, я заметил это, сделал так для удобств переопределения, так как все свойства доступны сразу в шаблоне для изменений значений. К примеру такое есть в дефолтных шаблонах и в material design тоже такое встречал
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
04.02.2024, 14:18
Цитата Сообщение от xellan24rus Посмотреть сообщение
К примеру такое есть в дефолтных шаблонах и в material design тоже такое встречал
В дефолтных используются DP свойства.
В MD - AP свойства, так как там не создаются свои CustomControl, а только добавляется из визуальная стилизация.
1
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 14:37  [ТС]
Элд Хасп, но и там и там по возможности идёт привязка TempelateBinging для привязанных свойств в Setter. Удобно тем что не нужно Path писать каждый раз, и при переопределение если путь не является dp свойством элемента, к примеру это Ap, тогда при переопределение шаблона будет удалён Path и без явного указания его вручную, его не заставить работать. Если это именно так сделано.

Пример
XML
1
2
3
4
5
6
7
8
9
<!-- original -->
<EllipseGeometry x:Name="rippleEllipse"
    Center="{Binding Path=(helper:MouseHelper.LastDownPosition), ElementName=templateRoot, TargetNullValue={StaticResource zero}}"
    RadiusY="{Binding RadiusX, RelativeSource={RelativeSource Self}}"/>
 
<!-- копия шаблона-->
<EllipseGeometry x:Name="rippleEllipse" 
    Center="{Binding (helper:MouseHelper.LastDownPosition), ElementName=templateRoot, TargetNullValue={StaticResource zero}}" 
    RadiusY="{Binding RadiusX, RelativeSource={RelativeSource Mode=Self}}"/>
В копии Path был удалён и LastDownPosition больше не работает.
Но я решил эту проблему, и от части в setter писать путь, не плохая практика.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
04.02.2024, 14:45
xellan24rus, скинул фиксацию Пример универсальной реализации для любых ед. измерения.

Добавлено через 6 минут
Цитата Сообщение от xellan24rus Посмотреть сообщение
Удобно тем что не нужно Path писать каждый раз, и при переопределение если путь не является dp свойством элемента, к примеру это Ap, тогда при переопределение шаблона будет удалён Path и без явного указания его вручную, его не заставить работать.
Просто нужно для себя самого хорошо понимать где DP, а где AP свойство.
В текущей реализации NumericUpDown свойства из StyleDataHelper могут использовать и как DP и как AP свойства.
По реализации это AP свойства. Но добавлена оболочка и переопределение, чтобы их можно было использовать и как DP свойства.

Мой вопрос не с этим связан.
А с тем, что есть эти сеттеры или нет - я не заметил разницы в визуализации. Если от них ничего не зависит, то зачем их добавлять?
1
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 14:49  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если от них ничего не зависит, то зачем их добавлять?
Для удобств редактирования свойств, ведь в копии шаблона сразу доступны все свойства в сеттерах
Там где они не нужны, сделал это с такой целью только.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 16:34  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
скинул фиксацию Пример универсальной реализации для любых ед. измерения.
Достаточно универсально вышло, пока что разбираюсь в коде

Value удалил из xaml и задал в c#
SelectedUnit указал так
XML
1
 SelectedUnit="{Binding [1], Source={x:Static local:NumericUpDownUnitsProxy.Units}}"
И с такой установкой значение больше во view не изменяется.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
04.02.2024, 19:58
Цитата Сообщение от xellan24rus Посмотреть сообщение
И с такой установкой значение больше во view не изменяется.
Меняется.
Но это же мили.
А добавляется значение "к истинному", то есть к метрам.
Измени на более мелкие - единицы увидишь.

Добавлено через 42 секунды
Нужно переопределить команды.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 20:00  [ТС]
Элд Хасп, я проксирование на ap свойства изменю на днях.
SelectedUnit="{Binding [1], Source={x:Static local:NumericUpDownUnitsProxy.Units}}"
Через посредника при использование не удобно использовать, на уровне textBox сделаю проксирование.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 20:05  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Меняется.
Но это же мили.

Оригинальное значение сбрасывается. Наверное всё такие лучше использовать оригинальное и выходное значение в разных свойствах
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 20:11  [ТС]
И в оригинальное значение из сохраненных данных проще подтянуть значение и сохраненный тип. А там уже выходное значение само изменится на нужное

Добавлено через 4 минуты
Элд Хасп, при смене типа единиц измерения не до конца понял почему в метрах меняется значение по единице, а в остальных больше единцы истинное значение меняется.
К примеру 100 у дюймов следующее истинное значение не 101 дюм, а 139, затем 178
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 20:23  [ТС]
Элд Хасп,

UnitConverter меняет исходное значение
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
04.02.2024, 20:49
Переопределил.
Пока делал это ещё раз пришёл к мысли, что внедрение единиц измерения в этот контрол путает логику. Всё становится весьма неоднозначным.

Добавлено через 1 минуту
Цитата Сообщение от xellan24rus Посмотреть сообщение
К примеру 100 у дюймов следующее истинное значение не 101 дюм, а 139, затем 178
Потому что добавляется всегда к "метрам".
Но уже изменил это.

Добавлено через 1 минуту
100 дюймов = 2,54 метра
Плюс 1 метр получаем 3,54 м = 139 дюймов.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 21:00  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Потому что добавляется всегда к "метрам".
Но уже изменил это.
Добавлено через 1 минуту
100 дюймов = 2,54 метра
Плюс 1 метр получаем 3,54 м = 139 дюймов.
Хм, а если нужно указать 101 дюм?
Мили также больше 62 не ставятся.
И кнопки на клавиатуре с колесиком мыши отвалились.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Потому что добавляется всегда к "метрам".
Но уже изменил это.
Кажется лучше брать исходное значение и рассчитывать из типа единицы измерения для него выходное значение.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Пока делал это ещё раз пришёл к мысли, что внедрение единиц измерения в этот контрол путает логику. Всё становится весьма неоднозначным.
Возможно, так как легче написать новый контрол чем переопределить текущий, слишком много завязок нужно делать.
Или переходить на виртуальные методы, которые в будущем можно будет переопределить.
Но исходя из разных реализаций, всегда сводилось к тому что, пишешь свое. Только код заимствуешь из примеров. Так как чтобы для переопределения порой нужно менять всю логику
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 21:32  [ТС]
Элд Хасп, спасибо огромное за помощь) Ответы в примерах я нашел, По свободнее стану закончу реализацию, в ветке код обновлю.

Если делать внедрение, то проще таким способом, но придётся писать свой словарь, свои расчеты, мне кажется все сводится к тому что проще скопировать реализацию, внести правки и будет новый контрол для своих нужд.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
04.02.2024, 21:35  [ТС]
Элд Хасп, но я всё равно подумаю об вашей идее, постараюсь облегчить код и привести свой пример реализации. Суть я понял, в коде +\- разобрался, спасибо ещё раз)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
06.02.2024, 00:12
xellan24rus, ещё одну реализацию скинул.
Вроде удачная получилась.
1
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
06.02.2024, 01:29  [ТС]
Элд Хасп, спасибо ещё раз) Вышло очень универсально и многозадачно)
Для DoubleTextBox вернул изначальную логику так как в примере она урезана была и SavePositionCursor перенес из OnPreviewKeyUp в RaiseCommand, так как потерялась возможность из положительного числа сделать отрицательное, так как при каждом нажатии курсор ворачивался на своё старое место.
В своем решение разделил NumericUpDown от NumericUpDownTime там как за счёт DoubleTextBox наследование потеряло весь смысл)
Ваше решение оформлю в отдельный элемент, так как его логика отличается от NumericUpDownTime и в плане использования для NumericUpDownTime внедрение единиц в готовый элемент немного усложняет простой вызов элемента.
Спасибо ещё раз помощь)
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вроде удачная получилась.
Я ошибок не нашёл)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2024, 01: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?


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru