none
MVVM - автодобавление элементов в список. RRS feed

  • Вопрос

  • Есть ComboBox. В нем отображается список IP. Пользователь может выбать один из них или вписать свой.

    Как добавить новый записаный элемент в коллекцию (например по LostFocus), используя паттерн MVVM?

    4 июля 2011 г. 12:04
    Отвечающий

Ответы

  • Получилось сделать проще:

    <ComboBox IsEditable="True"
         ItemsSource="{Binding Path=Items}" 
         SelectedItem="{Binding Path=SelectedItem}"
         DisplayMemberPath="Name"
         Text="{Binding Path=NewElementName, UpdateSourceTrigger=LostFocus}" />
    


    И в сеттере NewElementName проверяю есть ли Item с таким именем. Если есть, то ничего не далаю (комбобокс сам его выбирает), если нет его, то создаю новый с таким именем и проставляю в SelectedItem, не добавляя в коллекцию (чтобы при потере фокуса и возвращении начиналось редактирование текущего элемента, а не создание нового).

    Спасибо за помощь.

    4 июля 2011 г. 13:41
    Отвечающий

Все ответы

  • Это чуть чуть не то, но я делал так:

    Привязываю итемсурс кобобокса к нужному элементу и указываю конвертер, который к коллекции добавляет пункт "Добавить...". В SelectionChenged в случае выбора этого пункта вывожу диалог добавления нового пункта и, если все ОК, добовляю в коллекцию-источник новый пункт.

    В вашем случае я так понимаю вместо пункта "Добавить..." стоит текстбокс. Тогда может стоит пойти тем же путем и добавлять текстбокс в конвертере, за одно подписываясь на его LostFocus и от туда править коллекцию-источник... Правда не знаю соответсвует ли это философии MVVM :)

    4 июля 2011 г. 12:47
    Отвечающий
  • Получилось сделать проще:

    <ComboBox IsEditable="True"
         ItemsSource="{Binding Path=Items}" 
         SelectedItem="{Binding Path=SelectedItem}"
         DisplayMemberPath="Name"
         Text="{Binding Path=NewElementName, UpdateSourceTrigger=LostFocus}" />
    


    И в сеттере NewElementName проверяю есть ли Item с таким именем. Если есть, то ничего не далаю (комбобокс сам его выбирает), если нет его, то создаю новый с таким именем и проставляю в SelectedItem, не добавляя в коллекцию (чтобы при потере фокуса и возвращении начиналось редактирование текущего элемента, а не создание нового).

    Спасибо за помощь.

    4 июля 2011 г. 13:41
    Отвечающий