C # WPF Linq to SQL Привязка данных - PullRequest
       0

C # WPF Linq to SQL Привязка данных

0 голосов
/ 07 сентября 2010

Я сгенерировал класс Linq to Sql, который выглядит следующим образом.

alt text

, поэтому у меня есть 3 запроса, которые получают мои данные.

private IQueryable<Gesellschaft> loadedGesellschaft;
private IQueryable<Anschrift> loadedGesellschaftAnschrift;
private IQueryable<Email> loadedGesellschaftEmail;
private lgDataContext completeGesellschaft;

private void Button_Click(object sender, RoutedEventArgs e)
    {
        completeGesellschaft = new lgDatacontext();
        loadedGesellschaft = completeGesellschaft.Gesellschaft.Where(gid => gid.GID == 2);
        loadedGesellschaftAnschrift = completeGesellschaft.Anschrift.Where(FK_GID => FK_GID.FK_GesellschaftId == loadedGesellschaft.First().GID);
        loadedGesellschaftEmail = completeGesellschaft.Email.Where(FK_GID => FK_GID.FK_AnschriftId == loadedHauptanschrift.First().idAnschrift);
    }

После этого я хочу разместить эти 3 на моей странице.В результате получается что-то вроде этого в одном Office (loadedGesellschaft), в котором может быть более одного адреса (loadedGesellschaftAnschrift) и, возможно, имеется несколько адресов электронной почты (loadedGesellschaftEmail), поэтому у меня в окне есть несколько текстовых полей, которые содержат поля загруженныхGesellschaft и AdressesПисьма хранятся в выпадающих списках.

всегда ли я должен связывать источник предметов одного элемента управления, например,

<ComboBox Name="CBox_GDEmail" />

CBoxGDEmail.Itemsource = loadedGesellschaftEmail;

или есть возможность поместить всетри объекта вместе, чтобы datacontext окна?

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

Сначала создайте три класса: Gesellschaft, Anschrift и Email. Эти классы являются моделями представления; они выставляют любое свойство, значение которого вы хотите видеть в представлении. Заставьте Gesellschaft выставить свойство Anschriften типа IEnumerable<Anschrift>, а Anschrift выставить свойство Emails типа IEnumerable<Email>. (Я просто догадываюсь, что такое множественное число от Anschrift; почти все мои знания немецкого языка получены из настольных игр.)

В вашем XAML создайте три DataTemplate s, например ::

<DataTemplate DataType="{x:Type local:Gesellschaft}">
   <WrapPanel>
      <Label>Name</Label>
      <TextBlock Text="{Binding Gesellschaftname}"/>
      ...
      <ListBox ItemsSource="{Binding Anschriften}"/>
  </WrapPanel>
</DataTemplate>

Очевидно, что вы захотите использовать более разумную компоновку, чем вставлять кучу элементов управления в WrapPanel; это просто доказательство концепции. DataTemplate для Anschrift также должен иметь ListBox, ItemsSource которого связан с Emails.

После того, как вы это сделаете, все, что вам нужно в вашем XAML, это установить DataContext для ContentPresenter в экземпляр Gesellschaft. Он будет обработан с использованием DataTemplate, который вы определили для этого типа. Его ListBox будет содержать элемент для каждого Anschrift, отображаемый с использованием шаблона этого типа. U.s.w.

Поздравляю, теперь вы используете шаблон MVVM, как и все классные дети. Можно узнать намного больше, чем просто это, но это хорошее начало.

1 голос
/ 07 сентября 2010

Объедините ваши три объекта вместе в ViewModel объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...