powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Заполнение Combobox
8 сообщений из 8, страница 1 из 1
Заполнение Combobox
    #38672415
S_Shmall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две базы: Пациенты и Страны, базы связаны полем ContryID
В форме данные выводятся в детальном виде. Список стран хочется поместить в Combobox так, чтобы при навигации по базе пациентов, отражалась правильная страна. Ну, и соответственно, при добавлении записи страну можно было бы выбирать из списка всех стран.
Так формируются данные
Формирование данных
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
   public partial class MainWindow : Window
   {
      private PatientsEntities _context = new PatientsEntities();
      private CollectionViewSource patientViewSource;
 
      public MainWindow()
      {
         InitializeComponent();
      }
      
      private void Window_Loaded(object sender, RoutedEventArgs e)
      {
         var countryList = from c in _context.Countrys orderby c.CountryEn select c;        
 
         CollectionViewSource patientViewSource = ((CollectionViewSource)(this.FindResource("patientViewSource")));
 
         _context.Patients.Load();
 
         patientViewSource.Source = _context.Patients.Local;
 
         CollectionViewSource countryViewSource = ((CollectionViewSource)(this.FindResource("countryViewSource")));
         countryViewSource.Source = countryList.ToList();
      }



Класс пациенты
Пациенты
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public partial class Patients
    {
        public int PatientID { get; set; }
        public string Name { get; set; }
        public string Vorname { get; set; }
        public Nullable<System.DateTime> Birthdate { get; set; }
        public string CountryID { get; set; }
    
        public virtual Country Country { get; set; }


Класс страны
Страны
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public partial class Country
    {
        public Country()
        {
            this.Countrys = new ObservableCollection<Patients>();
        }
    
        public string CountryID { get; set; }
        public string CountryEn { get; set; }
    
        public virtual ObservableCollection<Patient> Patients { get; set; }
    }



Так сделана привязка в форме
Форма
Код: c#
1.
2.
3.
4.
<Window.Resources>
      <CollectionViewSource x:Key="patientsViewSource" d:DesignSource="{d:DesignInstance {x:Type local:Patients}, CreateList=True}"/>
      <CollectionViewSource x:Key="countrysViewSource" d:DesignSource="{Binding Patients, Source={StaticResource patientsViewSource}}"/>
   </Window.Resources>


В ComboBox'е если сделать привязку так
ComboBox
Код: c#
1.
<ComboBox x:Name="countryComboBox" DisplayMemberPath="CountryEn" ItemsSource="{Binding Source={StaticResource countryViewSource}}" SelectedValue="{Binding /CountryID}" SelectedValuePath="{Binding /CountryID, Source={StaticResource patientViewSource}}">


при загрузке формы отображается первая строка из списка, а при перемещении по базе ничего не отображается.
Где косяк?
...
Рейтинг: 0 / 0
Заполнение Combobox
    #38672567
DoctorZelen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_Shmall,

ну я думаю биндить надо к Property
и может быть вот так сделать с учетом MVVM

создаете любой класс, ну пусть class Load
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
private ObservableCollection<Patients> _patient = new ObservableCollection<Patients>();
private ObservableCollection<Country> _countryes = new ObservableCollection<Country>();

 public Load()
 {
     здесь грузите данные
     PatientView = //;
     CountryView = //;
 }

public ObservableCollection PatientView
{
  get { return _patient; } 
  set
  {
     _patient = value; 
     OnPropertyChanged("PatientView"); // строка будет меняться в зависимости от mvvm framework
  } 
аналогично для CountryView
}


в классе вьюшки
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public partial class MainWindow : Window
   {
      private Load _context = new Load();
      public MainWindow()
      {
         InitializeComponent();
         DataContext = _context;
      }
    }  



ну и сам биндинг

Код: xml
1.
2.
<ComboBox Name="patientComboBox" ItemsSource="{Binding PatientView}" DisplayMemberPath="Name" SelectedValuePath="CountryID" />
<ComboBox Name="countryComboBox" ItemsSource="{Binding CountryView}" SelectedValue="{Binding ElementName=patientComboBox, Path=SelectedItem.CountryID, Mode=TwoWay}" DisplayMemberPath="CountryEn" SelectedValuePath="CountryID" />



т.е. при выборе из бокса с пациентами, в комбобоксе с странами автоматически будет выбираться страна
писал по памяти, могут быть косяки.
...
Рейтинг: 0 / 0
Заполнение Combobox
    #38673353
S_Shmall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DoctorZelen,
OK, спасибо, будем пробовать, теперь бы еще с MVVM разобраться, что за зверь ;)
...
Рейтинг: 0 / 0
Заполнение Combobox
    #38673800
DoctorZelen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_Shmall,

http://www.mvvmlight.net/ рекомендую
еще мне нравится mvvm telerik, не бесплатно правда, но все очень просто.
...
Рейтинг: 0 / 0
Заполнение Combobox
    #38673844
S_Shmall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DoctorZelen,

А какой mvvm framevork Вы используете? Откуда этот метод OnPropertyChanged()?

У меня данные по пациентам не в комбобоксе, видимо биндинг тоже поменяется. Т.е. я не могу вот так написать

Код: c#
1.
SelectedValue="{Binding ElementName=patientComboBox, Path=SelectedItem.CountryID, Mode=TwoWay}" 



а откуда вот эта переменная DataContext взялась?
...
Рейтинг: 0 / 0
Заполнение Combobox
    #38673848
S_Shmall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не увидел сразу Вашего сообщения. Скачал, буду смотреть
...
Рейтинг: 0 / 0
Заполнение Combobox
    #38674546
S_Shmall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_Shmall,
Решил я все-таки эту задачу. Доделал свой вариант. Немного изменил загрузку данных
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
   private void Window_Loaded(object sender, RoutedEventArgs e)
      {
 
         CollectionViewSource patientViewSource = ((CollectionViewSource)(this.FindResource("patientViewSource")));
         _context.Patients.Load();
         patientViewSource.Source = _context.Patients.Local;
 
         CollectionViewSource countryViewSource = ((CollectionViewSource)(this.FindResource("countryViewSource")));
         _context.Countries.Load();
         countryViewSource.Source = _context.Countries.Local;


и привязку комбобокса
Код: c#
1.
<ComboBox x:Name="countryComboBox" DisplayMemberPath="CountryEn" ItemsSource="{Binding Source={StaticResource countryViewSource}}" SelectedValue="CountryID" SelectedValuePath="{Binding CountryID}">


Здесь первый ИД (SelectedValue="CountryID") в родительской таблице, второй (SelectedValuePath="{Binding CountryID}) в дочерней

С шаблоном пока разбираюсь, не очень там все понятно.
...
Рейтинг: 0 / 0
Заполнение Combobox
    #38675040
DoctorZelen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_Shmall,
я использую telerik. Про DataContext можно посмотреть http://www.codeproject.com/Articles/321899/DataContext-in-WPF на примере.
Насчет MVVM
http://msdn.microsoft.com/ru-ru/magazine/dd419663.aspx#id0090051
http://habrahabr.ru/post/111105/
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Заполнение Combobox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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