WPF ComboBox с привязкой к данным с элементом «New ...» - PullRequest
5 голосов
/ 26 октября 2010

Привет всем
У меня есть выпадающий список, который привязан к списку элементов.Но в дополнение к этому списку элементов я хочу иметь еще один элемент.Этот элемент должен отображать текст «New ...»
Идея состоит в том, что если они выбирают один из нормальных элементов, он выполняет некоторые действия с этим элементом.Если они выберут элемент «Новый», он выведет их на экран, где они смогут создать новый элемент.
Проблема в том, что когда вы связываете что-то с данными, у вас нет возможности добавить к нему еще один элемент, и естьнет вопроса о добавлении фиктивного элемента в список элементов ...

Это возможность создать новый элемент управления на основе ComboBox со свойством DefaultElement?(со всеми связанными шаблонами, привязкой команд и т. д.)

Ответы [ 3 ]

5 голосов
/ 26 октября 2010

Для этого я ранее создал фиктивный класс-обертку для обычного типа, позволяющий вам связывать список, содержащий в основном правильные значения, а также ваш "Новый ...", например,

public class DisplayClass
{
    public DisplayClass(ModelClass mc)
    {
         this.mc = mc;
    }

    public string Name
    {
        get { return this.mc != null ? this.mc.Name : "New..."; }
    }

    public bool IsDummy
    {
        return this.mc == null;
    }

    public ModelClass Model
    {
        return this.mc;
    }
}

Затем вы можете разместить их в своем контексте данных (ViewModel) и обработать выборку соответствующим образом на основе IsDummy. Он не такой автоматический, как элемент управления с этой встроенной функциональностью, но довольно прост и, вероятно, его легко сделать универсальным и использовать его повторно.

3 голосов
/ 14 декабря 2013

Установите для свойства ItemsSource значение CompositeCollection с новым элементом и связанной коллекцией, а затем определите выбор этого элемента на основе выбранного индекса или чего-либо подобного.

Пример кода:

<ComboBox>
   <ComboBox.ItemsSource>
      <CompositeCollection>
         <ComboBoxItem>Add New Item...</ComboBoxItem>
         <CollectionContainer Collection="{Binding Source={StaticResource CollectionSource}}"/>
      </CompositeCollection>
   </ComboBox.ItemsSource>
</ComboBox>

MSDN для CompositeCollection: http://msdn.microsoft.com/en-us/library/system.windows.data.compositecollection(v=vs.110).aspx

2 голосов
/ 26 октября 2010

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

На вашем месте я бы вставил «новую» сущность в первую позицию связанной коллекции и обнаружил ее в моей модели представления, чтобы вызвать соответствующее действие, когда пользователь выбирает ее.

...