Детализация привязки данных wpf с однозначным сопоставлением (структура сущностей) - PullRequest
1 голос
/ 26 декабря 2011

У меня есть Пациент класса, где у каждого пациента может быть ноль или один адрес, и у каждого адреса есть один пациент. Я следовал за этим Walkthroug , где они сначала используют структуру сущности и код. Перетаскивание источника данных пациента в окне WPF создает сетку с Patient CollectionViewSource, как в учебном пособии с Департаментом. Теперь моя проблема заключается в том, что я не могу добавить источник данных Address в окно, как они делают со свойством Courses в учебнике (у них там отношение один ко многим). Свойство Address у Patient серого цвета:

enter image description here

Я попытался добавить свойство Address через путь в Xaml:

<Grid DataContext="{StaticResource patientViewSource}">
...
  <DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True"  ItemsSource="{Binding}" Name="patientDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" >
    <DataGrid.Columns>
      <DataGridTextColumn x:Name="lastNameColumn" Binding="{Binding Path=LastName}" />                
      <DataGridTextColumn x:Name="addressStreetColumn" Binding="{Binding Path=Address.Street}" />
    </DataGrid.Columns>
  </DataGrid>
...
</Grid>

Результатом было то, что улица от существующих пациентов была показана как предназначено. Но как только я пытаюсь вставить нового пациента и адрес, записав имя пациента и название улицы в пустую строку сетки, я получаю исключение InvalidOperationException, в котором говорится «Для двусторонней привязки требуется путь или XPath». Я предполагаю, что причина, по которой я не могу просто перетащить источник данных Address в окно, заключается в том, что мы не имеем дело со стандартными отношениями 1: n.

Может кто-нибудь сказать мне, пожалуйста, как сделать так, чтобы программа автоматически создала (и сохранила) новый экземпляр адреса, который подключен к нужному пациенту, как только я введу название улицы?

1 Ответ

1 голос
/ 26 декабря 2011

Я понял это.Нужно развернуть Адрес и затем нажать Детали:

enter image description here

После этого его можно перетаскивать.

Было бы проще, если бы это был выбор по умолчанию...

...