У меня есть следующие таблицы:
Company {CompanyID, CompanyName}
Сделка {CompanyID, Value}
И у меня есть список:
<ListBox Name="Deals"
Height="100" Width="420" Margin="0,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"
Visibility="Visible" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding}" SelectionChanged="Deals_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold" />
<TextBlock Text=" -> TGS -> " />
<TextBlock Text="{Binding BuyFrom}" FontWeight="Bold" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Как видите, я хочу отобразить CompanyName, а не ID, который является внешним ключом.Отношение «companyRowByBuyFromCompanyFK» существует, так как в Deals_SelectionChanged я могу получить доступ к свойству companyRowByBuyFromCompanyFK строки Deals, а также могу получить доступ к свойству CompanyName этой строки.
Является ли причиной того, что это не работает, потому что XAML использует привязкуиндексатор?Вместо свойств в CompanyRows в моей DataTable?
В данный момент я получаю такие значения, как
Редактировать Обновление ошибки привязки
System.Windows.Data Ошибка: 39: Ошибка пути BindingExpression: свойство 'companyRowByBuyFromCompanyFK' не найдено в 'объект '' 'DataRowView' (HashCode = 30295189) '.BindingExpression: Path = companyRowByBuyFromCompanyFK.CompanyName;DataItem = 'DataRowView' (HashCode = 30295189);целевым элементом является TextBlock (Name = '');Свойство target имеет значение «Text» (тип «String»)
Похоже, что оно не преобразует элемент DataRowView в SuppliersRow
Какой наилучший способ выполнить это?
Создать конвертер для преобразования внешних ключей, используя таблицу, на которую ссылаются как на пользовательский параметр.
Создать представление таблицы для каждой таблицы?Это было бы долго, потому что у меня довольно много таблиц с внешними ключами.