Элемент управления вкладками WPF с одинаковыми элементами управления для всех вкладок

Как мне создать n-количество вкладок с элементами управления данными в wpf?

Допустим, в главном приложении есть кнопки «новый клиент» и «сохранить данные». Когда нажимается «новый клиент», появляется новая вкладка с двумя текстовыми полями «Имя» и «Номер клиента», содержащимися на вкладке, и так далее. После заполнения двух полей нажатие кнопки «Сохранить данные» должно сохранить информацию из выбранной вкладки в базе данных.

Проблема в том, что у меня есть статическое имя для текстовых полей «Имя» и «Номер клиента» как x: Name = «CustomerName» и x: Name = «CustomerNumber». Я обнаружил, что вы не можете их дублировать.

Может кто-нибудь посоветовать, как я могу решить эту проблему? Заранее спасибо!


person foureight84    schedule 07.09.2010    source источник


Ответы (1)


Используя MVVM:

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

NewCustomerView не должен иметь имена, связанные с его элементами управления, поскольку вы будете связывать их свойства Text со свойствами в ViewModel или базовой модели, если только вам не нужно ссылаться на них для какой-либо другой цели, кроме получения данных от каждого из них.

В вашей основной форме у вас будет Tab Control с источником элемента, установленным на ObservableCollection в MainWindowViewModel. Нажатие кнопки «Новый клиент» внесет новую запись в эту коллекцию ObservableCollection.

В MainWindowView вы должны поместить шаблон данных, который сопоставляет NewCustomerViewModel с NewCustomerView, например:

  <DataTemplate DataType="{x:Type vm:NewCustomerViewModel}">
    <AdornerDecorator>
       <views:NewCustomerView DataContext="{Binding}"/>
    </AdornerDecorator>
  </DataTemplate>

По сути, это означает, что когда контент представляет собой NewCustomerViewModel, визуализируйте NewCustomerView.

Вам следует пойти и почитать о MVVM, так как это решит вашу проблему именования, а также улучшит архитектуру приложения.

См. статью Джоша Смита о MVVM, есть много другой информации там тоже читать.

person benPearce    schedule 07.09.2010
comment
Если я не возьмусь за проект MVVM, есть ли другие методы для его выполнения? - person foureight84; 09.09.2010
comment
Вы все еще можете привязать свой TabControl ItemsSource к ObservableCollection из UserControls в своем коде, когда пользователь нажимает New Customer, создать новый экземпляр NewCustomerUserControl и добавить его в коллекцию - person benPearce; 09.09.2010