Связывание WPF MVVM в ComboBox с двумя внешними ключами, которые ссылаются на одну и ту же таблицу - PullRequest
0 голосов
/ 27 апреля 2020

Итак,

У меня есть таблица с Persons, с двумя внешними ключами TownBornId и TownResidentialId, оба ссылаются на таблицу Towns. У меня также есть таблица с сотрудниками с одним внешним ключом TownId, ссылающаяся на таблицу Towns.

В пользовательском контроле для сотрудников у меня есть рабочий выпадающий список, как в следующем примере.

<ComboBox x:Name="TownsComboBox" Style="{StaticResource ComboBox}" 
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.AllTowns}" 
SelectedItem="{Binding Path=Town, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
DisplayMemberPath="TownName" 
SelectedValue="{Binding Path=Town.Id}" 
SelectedValuePath="Id" 
ToolTip="Town"  />

Сейчас В пользовательском контроле для Person мне нужны два комбинированных списка, и я не знаю, как различать привязки TownBornId и TownResidentialId. Не могли бы вы дать мне руководство?

Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2020

Использование IValueConverter - один из способов достижения этого.

Вы не отображали классы данных. Затем я предполагаю его имена с помощью примера c.

1) Создайте класс Converter в требуемом пространстве имен.

public class TownsConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        List<Town> result = new List<Town>; // use your type of List or ObservableCollection
        if (value is List<Town> towns)
        {
            foreach (Town town in towns)
            {
                if (...) // your condition here
                {
                    result.Add(town);
                }
            }
        }
        return result;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => null;
}

2) Затем добавьте конвертер в Window.Resources

<Window.Resources>
    <local:TownsConverter x:Key="TownsConverter"/>
</Window.Resources>

3) Затем прикрепите его к Binding

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.AllTowns, Converter={StaticResource TownsConverter}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...