powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Топик ненависти к WPF
25 сообщений из 336, страница 3 из 14
Топик ненависти к WPF
    #36571879
Сыначка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SilverlightЗЫ Вся идеология xaml построена на композиции, за счет этого достигается гибкость и не нужно на каждый чих создавать новые контролы, как в WinForms. Если тебе нравится этот мазахизм, то, как тебе уже советывали, оставайся на формачках.
Если не понимаешь, как можно обойтись без наследования, то WPF здесь не причем.
Чувак, какая нах композиция, тебя о наследовании, как об основопологающем ките ООП, спрашивают. Чё дурку врубаешь?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36571991
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredOFF
МакДональд ...
Да, короче Макдональд опять капусту рубит.
Нашёл в сети англ. версию.
Вот сравнение содержания 2-х его книг.
Pro Silverlight 2 in C# 2008 уже куплена на русском. Хватит.

Pro Silverlight 2 in C# 2008CHAPTER 1 Introducing Silverlight
CHAPTER 2 XAML
CHAPTER 3 Layout
CHAPTER 4 Dependency Properties and Routed Events
CHAPTER 5 Elements
CHAPTER 6 The Application Model
CHAPTER 7 Shapes and Geometries
CHAPTER 8 Brushes and Transforms
CHAPTER 9 Animation
CHAPTER 10 Sound, Video, and Deep Zoom.
CHAPTER 11 Styles, Templates, and Custom Controls
CHAPTER 12 Browser Integration
CHAPTER 13 ASP.NET and Web Services
CHAPTER 14 Data Binding
CHAPTER 15 Isolated Storage
CHAPTER 16 Multithreading
CHAPTER 17 Networking
Pro Silverlight 3 in C#Chapter 1: Introducing Silverlight
Chapter 2: XAML
Chapter 3: Layout
Chapter 4:Dependency Properties and Routed Events
Chapter 5: Elements
Chapter 6: The Application Model
Chapter 7: Navigation
Chapter 8: Shapes and Geometries
Chapter 9: Brushes, Transforms,and Bitmaps
Chapter 10: Animation
Chapter 11: Sound, Video, and Deep Zoom
Chapter 12: Styles and Behaviors
Chapter 13: Templates and Custom Controls
Chapter 14: Browser Integration.
Chapter 15: ASP.NET Web Services.
Chapter 16: Data Binding
Chapter 17: Data Controls
Chapter 18: Isolated Storage.
Chapter 19: Multithreading
Chapter 20: Networking
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36572033
Silverlight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята нашли золотую жилу - каждые 8мес новая книжка. 13 выйдет Sl 4.0, появятся новые клоны.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36578113
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ComboBox, а возможно и сам Selector... При присваивании значения свойству ItemsSource, SelectedValue автоматически присваивается null. Как следствие, null присваивается соответствующему свойству сущности через датабиндинг. Это не совсем то совсем не то что хотелось бы... Интересно, что же помешало автору сбрасывать SelectedValue только в случае, если в новом наборе данных не найдена соответствующая запись.

Вспомнилась песня "Я убью тебя, лодочник..."
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36579724
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, получился такой костыль, вроде работает:

Код: 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.
namespace SspMain
{
    public class ComboBox : System.Windows.Controls.ComboBox
    {
        static ComboBox()
        {
            DefaultStyleKeyProperty.OverrideMetadata(
                typeof(SspMain.ComboBox),
                new FrameworkPropertyMetadata(typeof(SspMain.ComboBox))
            );

            var itemsSourcePropertyMetadata = new FrameworkPropertyMetadata();

            itemsSourcePropertyMetadata.CoerceValueCallback += (s, e) =>
                ((SspMain.ComboBox)s).CoerceItemsSource(e);

            itemsSourcePropertyMetadata.PropertyChangedCallback += (s, e) =>
                ((SspMain.ComboBox)s).ItemsSourceChanged();

            ItemsSourceProperty.OverrideMetadata(typeof(SspMain.ComboBox), itemsSourcePropertyMetadata);
        }

        #region Костыль для SelectedValue

        object _pSelectedValue;

        object CoerceItemsSource(object value)
        {
            _pSelectedValue = SelectedValue;
            return value;
        }

        void ItemsSourceChanged()
        {
            if (_pSelectedValue != null)
                SelectedValue = _pSelectedValue;
        }

        #endregion
    }
}
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36588977
Фотография Мусичка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лёш, зачем такие бубны? Достаточно на проблему глянуть под другим углом.
Например, биндим модель к контексту, в модели предоставляем проперть, к которой декларативно будет связан наш SelectedValue.

Код: plaintext
1.
2.
3.
<ComboBox x:Name="ComboBox1" ItemsSource="{Binding PhonebookEntries}" 
        DisplayMemberPath="Name" 
        SelectedValuePath="Name" 
        SelectedValue="{Binding PhonebookEntry}" />

Код: plaintext
DataContext = new ConnectionViewModel("test2");

Модель
Код: 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.
public class ConnectionViewModel : INotifyPropertyChanged
{
    public ConnectionViewModel(string defaultPhoneBook)
    {
        IList<PhoneBookEntry> list = new List<PhoneBookEntry>();
        list.Add(new PhoneBookEntry("test"));
        list.Add(new PhoneBookEntry("test2"));
        list.Add(new PhoneBookEntry("test3"));
        _phonebookEntries = new CollectionView(list);
        PhonebookEntry = defaultPhoneBook;
    }
    private readonly CollectionView _phonebookEntries;
    private string _phonebookEntry;

    public CollectionView PhonebookEntries
    {
        get { return _phonebookEntries; }
    }

    public string PhonebookEntry
    {
        get { return _phonebookEntry; }
        set
        {
            if (_phonebookEntry == value) return;
            _phonebookEntry = value;
            OnPropertyChanged("PhonebookEntry");
        }
    }
    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}


Тем самым, мы просто проинициализировали конструктор модели значением по умолчанию.
P.S. Этим значением может служить, как вариант, первый элемент коллекции для комбобокса.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589132
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МусичкаНужно иметь возможность присваивания ItemsSource не только перед присваиванием SelectedValue, но и после этого. Т. е. в произвольном порядке. Если вынести из конструктора код:
Код: plaintext
1.
2.
3.
    public UpdateData()
    {
        PhonebookEntries = _myService.GetPhoneBookEntries();
    }
При вызове этого метода, PhonebookEntry (к которому привязано SelectedValue) будет присвоено null. При определённых условиях это может стать проблемой на пустом месте.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589137
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поторопился с предыдущим постом, не читайте его.

Почему-то не хочется выносить этот код в "маленькую" вьюмодельку чисто для комбобокса.

На мой взгляд, это может накладывать некоторые ограничения на прикладной код и делать его менее удобным. Впрочем, позже ещё об этом подумаю, спасибо. :-)
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589171
Silverlight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Комбобоксы сами по себе не живут. Они должны изменять значение, лучше всего это делать c помощью ViewModel.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589214
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverlightКомбобоксы сами по себе не живут. Они должны изменять значение, лучше всего это делать c помощью ViewModel.О чём и речь. Просто хочется, чтобы это выглядело примерно так, и не было дополнительных ограничений по порядку присваивания свойств Product и Categories.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class ProductEditViewModel
{
    public Db.Products Product { get; set; }
    public IEnumerable<Db.Categories> Categories { get; set; }

    // Реализацию INotifyPropertyChanged опускаю
}

<ComboBox ItemsSource="{Binding Categories}"
                  SelectedValue="{Binding Product.CategoryID}"
                  SelectedValuePath="CategoryID"
                  DisplayMemberPath="CategoryName"/>
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589281
Фотография Мусичка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПочему-то не хочется выносить этот код в "маленькую" вьюмодельку чисто для комбобокса.
Выносить вьюмодельку чисто для комбобокса не нужно. У Вас должна быть вью модель полностью для всего представления. Типа паттерны, веяния моды и современности :)

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

МусичкаАлексей КНа мой взгляд, это может накладывать некоторые ограничения на прикладной код и делать его менее удобным. Впрочем, позже ещё об этом подумаю, спасибо. :-)
Тем самым Вы нагло упаковали MVVM в печь :) А зря Почему? Посмотрите на мой предыдущий пост, там всё "в рамках концепции".

ЗЫ: Тут вопрос не "как это делать", а "как это делать удобнее".
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589403
Фотография Мусичка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТем более, выносить "это" в прикладной код глупо.
Другими словами, разделять представление и его логику - глупый подход?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589418
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторАлексей К,


ЗЫ: Тут вопрос не "как это делать", а "как это делать удобнее".

МСУ учись, так думать. это двигатель прогресса.
А то уже утомили мозговые коробки ,которые в цикле for each перебирают шаблоны,которые им написали дяди в своих книжках.

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

а то аж смешно когда видишь, недовольных, которые заметил, что ктото сошел с рельс MVVM.
обида за себя видимо. за то ,что сходить с рельс не всем дано.
я даже бывает радуюсь, что так много народу сидят на всяких рельсах типа mvvm и других. для других больше места остается под креатив.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589449
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МусичкаАлексей КТем более, выносить "это" в прикладной код глупо.
Другими словами, разделять представление и его логику - глупый подход?Скажем так: текущая реализация представления мешает реализовать логику модели. Отсюда вывод - нужно изменить представление.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589482
Фотография Мусичка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КСкажем так: текущая реализация представления мешает реализовать логику модели. Отсюда вывод - нужно изменить представление.
То есть, "косячная" реализация представления - это, значит, не глупый подход, а человеческое отделение представления от его логики - глупый подход? Я правильно понимаю?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589536
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МусичкаТо есть, "косячная" реализация представления - это, значит, не глупый подходЯ чтоли комбобокс писал?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589613
Фотография Мусичка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМусичкаТо есть, "косячная" реализация представления - это, значит, не глупый подходЯ чтоли комбобокс писал?
Комбобокс - это не представление, а элемент представления.
Хотите нормально взаимодействовать с моделью и представлением? Пишите ViewModel.
P.S. И комбобокс тут не при чём.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589616
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МусичкаКомбобокс - это не представление, а элемент представления.Это что-то меняет?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589643
Фотография Мусичка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМусичкаКомбобокс - это не представление, а элемент представления.Это что-то меняет?

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

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

[quot Алексей К]То что Вы предлагали в начале обсуждения не решает поставленную задачу. По вашему примеру я могу лиш предполагать, как бы вы её решили. Возможно я ошибаюсь.
Как не решает? Сменили источник, комбобокс автоматически подхватит забайденный SelectedValue к проперти PhonebookEntry, которая в свою очередь проинициализировалась в конструкторе ViewModel. Этаким способом я как-бы "обманул" комбобокс, подпихнув под него конкретное значение.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589851
Фотография Мусичка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПриведите пример прикладного кода аналогичный этому - сравним.
Я же привёл уже на ViewModel , что не устроило-то?

Алексей КТо что Вы предлагали в начале обсуждения не решает поставленную задачу. По вашему примеру я могу лиш предполагать, как бы вы её решили. Возможно я ошибаюсь.
Как не решает? Сменили источник, комбобокс автоматически подхватит забайденный SelectedValue к проперти PhonebookEntry, которая в свою очередь проинициализировалась в конструкторе ViewModel. Этаким способом я как-бы "обманул" комбобокс, подпихнув под него конкретное значение.
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36589983
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МусичкаКак не решает? Сменили источник, комбобокс автоматически подхватит забайденный SelectedValue к проперти PhonebookEntry, которая в свою очередь проинициализировалась в конструкторе ViewModel. Этаким способом я как-бы "обманул" комбобокс, подпихнув под него конкретное значение.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class ProductEditViewModel
{
    public Db.Products Product { get; set; }
    
    IEnumerable<Db.Categories> _categories;
    public IEnumerable<Db.Categories> Categories 
    { 
        get { return _categories; }
        set
        {
            int? priorCategoryID = null;
            if (Product != null)
                priorCategoryID = Product.CategoryID;

            _categories = value;
            OnPropertyChanged("Categories");

            if (priorCategoryID.HasValue)
                Product.CategoryID = priorCategoryID;
        }
    }
}

Так? И это писать для всех 327 комбобоксов?
...
Рейтинг: 0 / 0
Топик ненависти к WPF
    #36590038
Фотография Мусичка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТак? И это писать для всех 327 комбобоксов?
У Вас на окне 327 комбобоксов?
...
Рейтинг: 0 / 0
25 сообщений из 336, страница 3 из 14
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Топик ненависти к WPF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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