В зависимости от того, где вы выставляете коллекцию стран, есть несколько разных вариантов.
Если в Address или каком-либо другом объекте ViewModel существует страна, вы изменяете конвертер для реализации IMultiValueConverter вместо IValueConverter, а затем используете MultiBinding для передачи как CountryCode, так и стран (представленных как свойство). Затем вам нужно получить доступ и привести значения [0] и значения [1], чтобы использовать их для поиска в методе Convert.
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource CountryNameLookupConverter}">
<Binding Path="CountryCode" />
<Binding Path="Countries" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Если вы выставляете страны статически (то есть Lookup.Countries), вы можете передать коллекцию в IValueConverter либо как свойство, либо через ConverterParameter. Вот конвертер со свойством:
public class CountryNameLookupConverter : IValueConverter
{
public IEnumerable<Country> LookupList { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Country country = LookupList.FirstOrDefault(c => c.Code.Equals(value));
if (country == null)
return "Not Found";
return country.Name;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}
и ресурс конвертера будет объявлен как:
<local:CountryNameLookupConverter x:Key="CountryNameLookupConverter" LookupList="{x:Static local:Lookup.Countries}"/>
Или вместо этого передать в объектный параметр Convert:
<TextBlock Text="{Binding Path=CountryCode, Converter={StaticResource CountryNameLookupConverter}, ConverterParameter={x:Static local:Lookup.Countries}}" />