Я работаю над IValueConverter в Silverlight.Этот конвертер значений должен перебрать коллекцию элементов MyOption и получить совпадение.Значения MyOption на самом деле поступают из базы данных.Я использую этот конвертер в DataGrid.Из-за этого я не хочу попадать в базу данных каждый раз.Скорее, я хочу попасть в базу данных один раз и передать параметры конвертеру.Чтобы добиться этого, я подумал, что мне нужно открыть свойство и привязать к нему свою коллекцию элементов MyOption, как показано здесь:
<converters:MyTypeConverter x:Key="myTypeConverter" UpdateTypes="{Binding Path=MyOptions}" />
...
<TextBlock Text="{Binding Path=OptionID, Converter={StaticResource myTypeConverter}}" />
Затем я определю MyTypeConverter, как показано здесь:
public class MyTypeConverter : UIElement, IValueConverter
{
public ObservableCollection<MyOption> Options
{
get { return (ObservableCollection<MyOption>)GetValue(OptionsProperty); }
set { SetValue(OptionsProperty, value); }
}
public static readonly DependencyProperty OptionsProperty =
DependencyProperty.Register("Options",
typeof(string), typeof(MyTypeConverter), null);
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string result = SomeObject.Convert(value, Options);
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
К сожалению, я не могу заставить это работать.Как будто я не могу привязаться к конвертеру.Я получаю ошибку во время компиляции, которая говорит: «Тип System.Windows.UIElement не имеет определенных конструкторов».В то же время я не знаю, как передать MyOptions в преобразователь типов, чтобы не выполнять многократные поездки на сервер.