IValueConverter Использование коллекции подстановок - PullRequest
0 голосов
/ 12 марта 2020

Я использую такой конвертер:

    public class BreedConverter : IValueConverter
    {
        static ObservableCollection<Breed_> Breeds = Breed_.GetBreeds();

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null && Breeds.Count > 0)
            {
                short breedID = (short)value;
                Breed_ breed = Breeds.Single(s => s.BreedID == breedID);
                return (string)breed.Breed;
            }
            else
                return "";
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

Коллекция Breeds извлекается из базы данных SQL Server. Я хочу получить его один раз, а затем использовать его для преобразования. Я не хочу go к базе данных каждый раз, когда мне нужно конвертировать.

Есть ли лучший способ сделать это, например ResourceDictionary (который я не знаю, как использовать в этом сценарий, так как я еще нуб)?

1 Ответ

0 голосов
/ 15 марта 2020

Это то, что я смог получить на работу. Как упомянул @Darthchai, я создал коллекцию в классе / окне. Однако я не могу понять, как использовать INotifyPropertyChanged, чтобы сообщить указанному c TextBlock, чтобы выполнить преобразование. Я нуб, в конце концов. :) То, что я смог сделать - и я не знаю, является ли это правильным подходом - было использовать событие Loaded объекта TextBlock для выполнения преобразования. вот код:

        private void BreedTextBlock_Loaded(object sender, RoutedEventArgs e)
        {
            TextBlock textBlock = (TextBlock)sender;
            if (textBlock != null && Breeds.Count > 0)
            {
                try
                {
                    short breedID = short.Parse(textBlock.Text);
                    Breed_ breed = Breeds.Single(s => s.BreedID == breedID);
                    textBlock.Text = (string)breed.Breed;
                }
                catch
                {
                }
            }

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