powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Топик ненависти к WPF
25 сообщений из 336, страница 5 из 14
Топик ненависти к WPF
    #36668226
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МусичкаЕще раз. То, что Вы написали - это ViewModel. ViewModel рисуется не для комбобоксов, а для всего представления. То есть, выведение проперти Categories для байдинга SelectedValue - это всего-лишь маленькая крупица того, что нужно написать для представления :)
P.S. Вообще сам по себе MVVM предполагает наличие "многабукаф" в проекте. Ибо.
Очередной маразм. Никто в здравом уме не помещает в ViewModel справочники.Их создают непосредственно в xaml, а viewmodel не перегружают ненужными деталями. И путей для этого много:
- конвертер
- провайдеры данных
- через расширения xaml возможны любые варианты.Например,самый вменяемый-через DI контейнеры или фабрики
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668259
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому интересно - вот правильный код.

Правильный код
Код: plaintext
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.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
    class DelegateWeakReference
    {
        Type _delegateType;
        WeakReference _targetRef;
        MethodInfo _method;

        public DelegateWeakReference(Delegate value)
        {
            _delegateType = value.GetType();
            _method = value.Method;
            if (_method.IsStatic == false)
                _targetRef = new WeakReference(value.Target);
        }

        object Target
        {
            get { return _targetRef != null ? _targetRef.Target : null; }
        }

        public Delegate TryGetDelegate()
        {
            var target = Target;

            if (GetIsTargetCollected(target))
                return null;

            if (_method.IsStatic)
                return Delegate.CreateDelegate(_delegateType, _method);

            return Delegate.CreateDelegate(_delegateType, target, _method);
        }

        public bool IsTargetCollected
        {
            get { return GetIsTargetCollected(Target); }
        }

        bool GetIsTargetCollected(object target)
        {
            return target == null && _method.IsStatic == false;
        }

        public bool Equals(Delegate value)
        {
            return Target == value.Target && _method == value.Method;
        }
    }

    class WeakDelegate
    {
        object _lockObj = new object();
        List<DelegateWeakReference> _weakHandlers = new List<DelegateWeakReference>();

        public void Add(Delegate handler)
        {
            lock (_lockObj)
            {
                RemoveHandlersWithCollectedTarget();

                foreach (var handlerItem in handler.GetInvocationList())
                    _weakHandlers.Add(new DelegateWeakReference(handlerItem));
            }
        }

        public void Remove(Delegate handler)
        {
            lock (_lockObj)
            {
                RemoveHandlersWithCollectedTarget();

                foreach (var handlerItem in handler.GetInvocationList())
                    for (int i = _weakHandlers.Count - 1; i >= 0; i--)
                        if (_weakHandlers[i].Equals(handlerItem))
                            _weakHandlers.RemoveAt(i);
            }
        }

        public Delegate InvocationList
        {
            get
            {
                lock (_lockObj)
                {
                    RemoveHandlersWithCollectedTarget();

                    Delegate result = null;
                    foreach (var weakHandler in _weakHandlers)
                    {
                        var handler = weakHandler.TryGetDelegate();
                        if (handler != null)
                            result = Delegate.Combine(result, handler);
                    }
                    return result;
                }
            }
        }

        void RemoveHandlersWithCollectedTarget()
        {
            for (int i = 0; i < _weakHandlers.Count; i++)
                if (_weakHandlers[i].IsTargetCollected)
                    _weakHandlers.RemoveAt(i);
        }
    }

    public class WeakEventHandler
    {
        WeakDelegate _weakDelegate = new WeakDelegate();

        public void Add(EventHandler handler)
        {
            _weakDelegate.Add(handler);
        }

        public void Remove(EventHandler handler)
        {
            _weakDelegate.Remove(handler);
        }

        public void Invoke(object sender, EventArgs e)
        {
            var handler = (EventHandler)_weakDelegate.InvocationList;
            if (handler != null)
                handler(sender, e);
        }
    }

    public class WeakAction
    {
        WeakDelegate _weakDelegate = new WeakDelegate();

        public void Add(Action handler)
        {
            _weakDelegate.Add(handler);
        }

        public void Remove(Action handler)
        {
            _weakDelegate.Remove(handler);
        }

        public void Invoke()
        {
            var handler = (Action)_weakDelegate.InvocationList;
            if (handler != null)
                handler();
        }
    }
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668280
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕсли кому интересно - вот правильный код.
Не без ошибок. :-)

Patch для правильного кода
Код: plaintext
1.
2.
3.
4.
5.
        void RemoveHandlersWithCollectedTarget()
        {
            for (int i = _weakHandlers.Count - 1; i >= 0; i--)
                if (_weakHandlers[i].IsTargetCollected)
                    _weakHandlers.RemoveAt(i);
        }
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668290
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaОчередной маразм. Никто в здравом уме не помещает в ViewModel справочники.Их создают непосредственно в xaml, а viewmodel не перегружают ненужными деталями. И путей для этого много:
- конвертер
- провайдеры данных
- через расширения xaml возможны любые варианты.Например,самый вменяемый-через DI контейнеры или фабрики- берут из БД.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668353
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaОчередной маразм. Никто в здравом уме не помещает в ViewModel справочники.Их создают непосредственно в xaml, а viewmodel не перегружают ненужными деталями. И путей для этого много:
- конвертер
- провайдеры данных
- через расширения xaml возможны любые варианты.Например,самый вменяемый-через DI контейнеры или фабрики- берут из БД.
Все варианты, которые я описал, берут данные из БД, если нет кэширования
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668449
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaАлексей КSeVaОчередной маразм. Никто в здравом уме не помещает в ViewModel справочники. Их создают непосредственно в xaml , а viewmodel не перегружают ненужными деталями. И путей для этого много:
- конвертер
- провайдеры данных
- через расширения xaml возможны любые варианты.Например,самый вменяемый-через DI контейнеры или фабрики- берут из БД.
Все варианты, которые я описал, берут данные из БД, если нет кэшированияМеня смутило это. :-)
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668510
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaМусичкаЕще раз. То, что Вы написали - это ViewModel. ViewModel рисуется не для комбобоксов, а для всего представления. То есть, выведение проперти Categories для байдинга SelectedValue - это всего-лишь маленькая крупица того, что нужно написать для представления :)
P.S. Вообще сам по себе MVVM предполагает наличие "многабукаф" в проекте. Ибо.
Очередной маразм. Никто в здравом уме не помещает в ViewModel справочники. Их создают непосредственно в xaml, а viewmodel не перегружают ненужными деталями. И путей для этого много:
- конвертер
- провайдеры данных
- через расширения xaml возможны любые варианты.Например,самый вменяемый-через DI контейнеры или фабрики
Очередное гонево. Где там что-то сказано про "справочники"? Что ты понимаешь под ними?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668524
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНо но!!! Это часть новейшего WPF/SL фреймворка приложений будущего!!! :-)
Не спорю, но пока сыро и гнило :)

Алексей КМСУP.S2. Я жду полноценных WeakEventManager + IWeakEventListener, а не гуано на лопате :)Тут могу только посоветовать сходить к гуглу.
Дак уже ж ходил . Ужос.

Алексей КАлексей КЕсли кому интересно - вот правильный код.
Не без ошибок. :-)

Patch для правильного кода
Код: plaintext
1.
2.
3.
4.
5.
        void RemoveHandlersWithCollectedTarget()
        {
            for (int i = _weakHandlers.Count - 1; i >= 0; i--)
                if (_weakHandlers[i].IsTargetCollected)
                    _weakHandlers.RemoveAt(i);
        }


Лёнь, выложите солюшен с пару-тройкой кнопок и хендлингом вик эвентов. Посмотрим, потестируем.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668562
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЛёнь, выложите солюшен с пару-тройкой кнопок и хендлингом вик эвентов. Посмотрим, потестируем.Думал об этом, но боюсь меня люди не поймут. Все нервные какие-то. :-))
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668566
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КДумал об этом, но боюсь меня люди не поймут. Все нервные какие-то. :-))
Не уклоняйтесь!
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668573
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНо но!!! Это часть новейшего WPF/SL фреймворка приложений будущего!!! :-)
Не спорю, но пока сыро и гнило :)Промышленная эксплуатация сего творения расставит всё по своим местам. :-))
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668613
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПромышленная эксплуатация сего творения расставит всё по своим местам. :-))
Солюшен будет?

...
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668635
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУСолюшен будет?Ну если охото в нём поковыряться - мне не жалко. :-)

Для запуска нужна БД Northwind
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668637
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часть 2
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668688
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТо есть, выведение проперти Categories для байдинга SelectedValue- это всего-лишь маленькая крупица того, что нужно написать для представления :)
Вот яркий образец гонева и тупого, дословного понимания паттерна MVVM. Это только ты придумать можешь.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668716
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaМСУТо есть, выведение проперти Categories для байдинга SelectedValue- это всего-лишь маленькая крупица того, что нужно написать для представления :)
Вот яркий образец гонева и тупого, дословного понимания паттерна MVVM. Это только ты придумать можешь.
Ты продолжаешь читать задним местом?

Алексей КSilverlightКомбобоксы сами по себе не живут. Они должны изменять значение, лучше всего это делать c помощью ViewModel.О чём и речь. Просто хочется, чтобы это выглядело примерно так, и не было дополнительных ограничений по порядку присваивания свойств Product и Categories .

Код: plaintext
\nclass ProductEditViewModel\n{\n    public Db.Products Product { get; set; }\n    public IEnumerable<Db.Categories> Categories { get; set; }\n\n    // Реализацию INotifyPropertyChanged опускаю\n}\n\n<ComboBox ItemsSource="{Binding Categories}"\n                  SelectedValue="{Binding Product.CategoryID}"\n                  SelectedValuePath="CategoryID"\n                  DisplayMemberPath="CategoryName"/>\n


/topic/734817&pg=3#8660505
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668795
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУSeVaМСУТо есть, выведение проперти Categories для байдинга SelectedValue- это всего-лишь маленькая крупица того, что нужно написать для представления :)
Вот яркий образец гонева и тупого, дословного понимания паттерна MVVM. Это только ты придумать можешь.
Ты продолжаешь читать задним местом?

Алексей КSilverlightКомбобоксы сами по себе не живут. Они должны изменять значение, лучше всего это делать c помощью ViewModel.О чём и речь. Просто хочется, чтобы это выглядело примерно так, и не было дополнительных ограничений по порядку присваивания свойств Product и Categories .

Код: plaintext
\nclass ProductEditViewModel\n{\n    public Db.Products Product { get; set; }\n    public IEnumerable<Db.Categories> Categories { get; set; }\n\n    // Реализацию INotifyPropertyChanged опускаю\n}\n\n<ComboBox ItemsSource="{Binding Categories}"\n                  SelectedValue="{Binding Product.CategoryID}"\n                  SelectedValuePath="CategoryID"\n                  DisplayMemberPath="CategoryName"/>\n


/topic/734817&pg=3#8660505
А ты как всегда продолжаешь думать одним местом. Тебе доходит с сотого раза, повторяю
public IEnumerable<Db.Categories> Categories { get; set; }
это полный бред. В силу своей профнепригодности ты даже не можешь понять о чем идет речь.
Look-up\'ов может быть много, чтобы не перегружать VM, их спокойно можно создвать во View.
Один из вариантов
Код: plaintext
\n <UserControl.Resources>\n        <vm:ViewModelLocator  x:Key="Categories" Type="{x:Type vm:Categories}" />\n  </UserControl.Resources>\n
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668813
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaLook-up'ов может быть много, чтобы не перегружать VM, их спокойно можно создвать во View.
Один из вариантовМне хотелось иметь полный контроль во вьюмодели над создаваемыми лукапами. Из-за этого и возник вопрос.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668832
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто это топик создал человек, который не понял в чем суть технологи шаблонов.поддерживают его тут такие же :)

они поняли ошибочно суть шаблонов программирования.

есть люди которые думают над задачами=>
вырабатывают какой то шаблон=>
другие люди сталкиваясь со своими задачами, не хотят думать(это основная причина) и начинают искать выходы из положения: перебирают мысли других людей, и полагают,что если взять их мысли и наложить свою задача на них, и тогда произойдет экономия какого то ресурса:времени и л.б.ресурса =>
получаем армию не инженеров, а кодеров=>
инженеры, тем самым формируют некую касту,которая потом сертицифирует этих кодеров,раздает ордена отличия кодерам,и т.д.) малое государство такое получается.

автора эта тема уже вопрос кодера,который не понял, ка кэто так, шаблон не налез на мою задачу, какая плохая технология!
если вдуматься,то в этом мышлении уже изъят этап инженерии.ч.т.д.


извините за переход на личности,но это вся тема о личности.о возмущенной личности.как это так каста инженеров не подумала за кодера?!


это попытка логически завершить такие флудотемы о личностных эмоциях какого то человека.
лучше бы делились разработками под новые задачи,чем обсуждали всякие не понятные шаблоны для нарезки спагетти кода.да:) именно спагетти кода. у вас есть код,вы берете шаблон и режете ,режете...режете.

так же попроше,не выдирать слова из контекста и делать цитирование всего этого.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668849
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKпросто это топик создал человек, который не понял в чем суть технологи шаблонов.поддерживают его тут такие же :)Мне кажется, Вы что-то путаете.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668866
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ALL

Убедительная просьба - не разводить срач в этом топике. Он не для этого.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668872
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaLook-up'ов может быть много, чтобы не перегружать VM, их спокойно можно создвать во View.
Один из вариантовМне хотелось иметь полный контроль во вьюмодели над создаваемыми лукапами. Из-за этого и возник вопрос.
А кто запрещает это делать в ViewModelLocator? Для простых случаев какой еще нужен контроль?
ЗЫ На мой вгляд, подобный контроль должен быть вынесен отдельно в cущности для UseCase. Логику реализуем в них, а VM - простой агрегатор данных.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668881
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaА ты как всегда продолжаешь думать одним местом. Тебе доходит с сотого раза, повторяю
public IEnumerable<Db.Categories> Categories { get; set; }
это полный бред. В силу своей профнепригодности ты даже не можешь понять о чем идет речь.
Look-up'ов может быть много, чтобы не перегружать VM, их спокойно можно создвать во View.
Один из вариантов
Код: plaintext
1.
2.
3.
 <UserControl.Resources>
        <vm:ViewModelLocator  x:Key="Categories" Type="{x:Type vm:Categories}" />
  </UserControl.Resources>

В силу своей профнепригодности ты даже не можешь понять того, что это тоже самое. Что грузить представление, что грузить вьюмодель - те же яйца.
Тут логики никакой нет. Следовательно, Categories можно описать в ViewModel, а можно декларативно (как ты описываешь). Или MVVM уже запрещает писать проперти во ViewModel?
P.S. Сева, иди учи паттерн MVVM. Изучишь, приходи, проверю.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668884
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaLook-up'ов может быть много, чтобы не перегружать VM, их спокойно можно создвать во View.
Один из вариантовМне хотелось иметь полный контроль во вьюмодели над создаваемыми лукапами. Из-за этого и возник вопрос.
Сева просто не в теме. Впаривает декларативную привязку. Ни проперть и ни декларативная привязка не перечит шаблону проектирования. Короче, те же яйца.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36668886
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КAlexeiKпросто это топик создал человек, который не понял в чем суть технологи шаблонов.поддерживают его тут такие же :)Мне кажется, Вы что-то путаете.
+1
...
Рейтинг: 0 / 0
25 сообщений из 336, страница 5 из 14
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Топик ненависти к WPF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]